{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.178967Z",
     "start_time": "2025-01-16T10:50:39.174352Z"
    }
   },
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)  #设备是cuda:0，即GPU，如果没有GPU则是cpu\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.10.0\n",
      "numpy 2.0.2\n",
      "pandas 2.2.3\n",
      "sklearn 1.6.0\n",
      "torch 2.5.1+cpu\n",
      "cpu\n"
     ]
    }
   ],
   "execution_count": 28
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 数据准备",
   "id": "b88e7eb5aa080c40"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.329506Z",
     "start_time": "2025-01-16T10:50:39.258868Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from torchvision import datasets\n",
    "from torchvision.transforms import ToTensor\n",
    "\n",
    "# fashion_mnist图像分类数据集\n",
    "train_ds = datasets.FashionMNIST(\n",
    "    root=\"data\",\n",
    "    train=True,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")\n",
    "\n",
    "test_ds = datasets.FashionMNIST(\n",
    "    root=\"data\",\n",
    "    train=False,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")\n",
    "\n",
    "# torchvision 数据集里没有提供训练集和验证集的划分\n",
    "# 当然也可以用 torch.utils.data.Dataset 实现人为划分"
   ],
   "id": "83f446db32aefbe2",
   "outputs": [],
   "execution_count": 29
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.341093Z",
     "start_time": "2025-01-16T10:50:39.330939Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 从数据集到dataloader\n",
    "train_loader = torch.utils.data.DataLoader(train_ds, batch_size=32, shuffle=True)\n",
    "val_loader = torch.utils.data.DataLoader(test_ds, batch_size=32, shuffle=False)"
   ],
   "id": "be66ebfb15716802",
   "outputs": [],
   "execution_count": 30
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.356227Z",
     "start_time": "2025-01-16T10:50:39.342099Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 查看数据\n",
    "for datas, labels in train_loader:\n",
    "    print(datas.shape)\n",
    "    print(labels.shape)\n",
    "    break\n",
    "#查看val_loader\n",
    "for datas, labels in val_loader:\n",
    "    print(datas.shape)\n",
    "    print(labels.shape)\n",
    "    break"
   ],
   "id": "ad8f1b61082aad89",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([32, 1, 28, 28])\n",
      "torch.Size([32])\n",
      "torch.Size([32, 1, 28, 28])\n",
      "torch.Size([32])\n"
     ]
    }
   ],
   "execution_count": 31
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 定义模型",
   "id": "351d997db9ae16a6"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.363613Z",
     "start_time": "2025-01-16T10:50:39.357228Z"
    }
   },
   "cell_type": "code",
   "source": [
    "class NeuralNetwork(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.flatten = nn.Flatten()\n",
    "        self.linear_relu_stack = nn.Sequential(\n",
    "            nn.Linear(28 * 28, 300),  # in_features=784, out_features=300\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(300, 100),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(100, 10),\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        # x.shape [batch size, 1, 28, 28]\n",
    "        x = self.flatten(x)  \n",
    "        # 展平后 x.shape [batch size, 28 * 28]\n",
    "        logits = self.linear_relu_stack(x)\n",
    "        # logits.shape [batch size, 10]\n",
    "        return logits\n",
    "    \n",
    "model = NeuralNetwork()"
   ],
   "id": "d065352c95e1ead2",
   "outputs": [],
   "execution_count": 32
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "## 训练\n",
    "\n",
    "pytorch的训练需要自行实现，包括\n",
    "1. 定义损失函数\n",
    "2. 定义优化器\n",
    "3. 定义训练步\n",
    "4. 训练"
   ],
   "id": "9c78c22befe19d28"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.369218Z",
     "start_time": "2025-01-16T10:50:39.364626Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        #datas.shape [batch size, 1, 28, 28]\n",
    "        #labels.shape [batch size]\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item()) # tensor.item() 获取tensor的数值，loss是只有一个元素的tensor\n",
    "        \n",
    "        preds = logits.argmax(axis=-1)    # 验证集预测, axis=-1 表示最后一个维度,因为logits.shape [batch size, 10]，所以axis=-1表示对最后一个维度求argmax，即对每个样本的10个类别的概率求argmax，得到最大概率的类别, preds.shape [batch size]\n",
    "        pred_list.extend(preds.cpu().numpy().tolist()) # tensor转numpy，再转list\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list) # 验证集准确率\n",
    "    return np.mean(loss_list), acc # 返回验证集平均损失和准确率"
   ],
   "id": "d81904dc32df2026",
   "outputs": [],
   "execution_count": 33
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.376850Z",
     "start_time": "2025-01-16T10:50:39.370217Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs) # 实例化SummaryWriter, log_dir是log存放路径，flush_secs是每隔多少秒写入磁盘\n",
    "\n",
    "    def draw_model(self, model, input_shape):#graphs\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape)) # 画模型图\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            ) # 画loss曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        ) # 画acc曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "        ) # 画lr曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss,把loss，val_loss取掉，画loss曲线\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss) # 画loss曲线\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc) # 画acc曲线\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate) # 画lr曲线\n"
   ],
   "id": "4a2add4a24a6944e",
   "outputs": [],
   "execution_count": 34
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### Save Best",
   "id": "63167cad544ef204"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.382932Z",
     "start_time": "2025-01-16T10:50:39.377854Z"
    }
   },
   "cell_type": "code",
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=500, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir # 保存路径\n",
    "        self.save_step = save_step # 保存步数\n",
    "        self.save_best_only = save_best_only # 是否只保存最好的模型\n",
    "        self.best_metrics = -1 # 最好的指标，指标不可能为负数，所以初始化为-1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir): # 如果不存在保存路径，则创建\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0: #每隔save_step步保存一次\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None # 必须传入metric\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\")) # 保存最好的模型，覆盖之前的模型，不保存step，只保存state_dict，即模型参数，不保存优化器参数\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\")) # 保存每个step的模型，不覆盖之前的模型，保存step，保存state_dict，即模型参数，不保存优化器参数\n"
   ],
   "id": "3984587b63cbca66",
   "outputs": [],
   "execution_count": 35
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### Early Stop",
   "id": "a38296474689051f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.388534Z",
     "start_time": "2025-01-16T10:50:39.383939Z"
    }
   },
   "cell_type": "code",
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience # 多少个epoch没有提升就停止训练\n",
    "        self.min_delta = min_delta # 最小的提升幅度\n",
    "        self.best_metric = -1\n",
    "        self.counter = 0\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:#用准确率\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1 # 计数器加1，下面的patience判断用到\n",
    "            \n",
    "    @property\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ],
   "id": "c7e39b846e5530c6",
   "outputs": [],
   "execution_count": 36
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.394050Z",
     "start_time": "2025-01-16T10:50:39.389552Z"
    }
   },
   "cell_type": "code",
   "source": "500*32*5",
   "id": "9e73f2eb39c49bec",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "80000"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 37
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.402098Z",
     "start_time": "2025-01-16T10:50:39.395063Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device) # 数据放到device上\n",
    "                labels = labels.to(device) # 标签放到device上\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传，计算梯度，更新参数，这里是更新模型参数\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits.argmax(axis=-1)\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()  # 切换到验证集模式\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train() # 切换回训练集模式\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"], # 取出当前学习率\n",
    "                            )\n",
    "                    \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc) # 保存最好的模型，覆盖之前的模型，保存step，保存state_dict,通过metric判断是否保存最好的模型\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc) # 验证集准确率不再提升，则停止训练\n",
    "                        if early_stop_callback.early_stop:# 验证集准确率不再提升，则停止训练\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict"
   ],
   "id": "b78adf058f1730d9",
   "outputs": [],
   "execution_count": 38
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.455992Z",
     "start_time": "2025-01-16T10:50:39.416147Z"
    }
   },
   "cell_type": "code",
   "source": [
    "epoch = 100\n",
    "\n",
    "model = NeuralNetwork()\n",
    "\n",
    "# 1. 定义损失函数 采用MSE损失\n",
    "loss_fct = nn.CrossEntropyLoss()\n",
    "# 2. 定义优化器 采用SGD\n",
    "# Optimizers specified in the torch.optim package\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)\n",
    "\n",
    "# 1. tensorboard 可视化\n",
    "tensorboard_callback = TensorBoardCallback(\"runs\")\n",
    "tensorboard_callback.draw_model(model, [1, 28, 28])\n",
    "# 2. save best\n",
    "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints\", save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=10)"
   ],
   "id": "b9f1e4edf6ed9493",
   "outputs": [],
   "execution_count": 39
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.463395Z",
     "start_time": "2025-01-16T10:50:39.456993Z"
    }
   },
   "cell_type": "code",
   "source": "list(model.parameters())[1] #可学习的模型参数",
   "id": "10a37b16f9dbc384",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Parameter containing:\n",
       "tensor([-0.0002, -0.0281,  0.0129,  0.0086, -0.0090, -0.0186, -0.0025,  0.0023,\n",
       "        -0.0029, -0.0142, -0.0304, -0.0053, -0.0068, -0.0031, -0.0349, -0.0249,\n",
       "        -0.0304, -0.0355,  0.0001, -0.0179, -0.0250, -0.0290, -0.0336, -0.0318,\n",
       "        -0.0126, -0.0291,  0.0311, -0.0192,  0.0164, -0.0338, -0.0213,  0.0349,\n",
       "         0.0137,  0.0062, -0.0133,  0.0120,  0.0310,  0.0128,  0.0247,  0.0224,\n",
       "         0.0011,  0.0246, -0.0064,  0.0311, -0.0049, -0.0247, -0.0301,  0.0002,\n",
       "         0.0214,  0.0234,  0.0252, -0.0288, -0.0254, -0.0069, -0.0201, -0.0242,\n",
       "         0.0077, -0.0121,  0.0107,  0.0120, -0.0316,  0.0197,  0.0130,  0.0045,\n",
       "         0.0119,  0.0264, -0.0142,  0.0346,  0.0204, -0.0037,  0.0198, -0.0015,\n",
       "         0.0303,  0.0344, -0.0039, -0.0069, -0.0279, -0.0173, -0.0198,  0.0344,\n",
       "        -0.0314,  0.0301,  0.0048,  0.0328,  0.0168, -0.0311,  0.0159, -0.0320,\n",
       "         0.0131, -0.0333, -0.0296, -0.0017, -0.0140,  0.0122, -0.0321,  0.0142,\n",
       "        -0.0316, -0.0209,  0.0096,  0.0117,  0.0043,  0.0002, -0.0080,  0.0171,\n",
       "        -0.0161,  0.0078,  0.0036, -0.0198, -0.0154, -0.0355, -0.0291,  0.0078,\n",
       "         0.0155,  0.0199,  0.0091,  0.0157, -0.0027,  0.0299,  0.0145, -0.0308,\n",
       "        -0.0070,  0.0129, -0.0273, -0.0175,  0.0075,  0.0013, -0.0062,  0.0244,\n",
       "         0.0132, -0.0318, -0.0026,  0.0108,  0.0013,  0.0099, -0.0010,  0.0108,\n",
       "        -0.0163,  0.0126,  0.0260, -0.0102, -0.0153,  0.0075,  0.0132, -0.0221,\n",
       "        -0.0059,  0.0004, -0.0325, -0.0191,  0.0142, -0.0095,  0.0002,  0.0263,\n",
       "         0.0210,  0.0209,  0.0259, -0.0040, -0.0291, -0.0302, -0.0252,  0.0086,\n",
       "         0.0255, -0.0277, -0.0073, -0.0303,  0.0155,  0.0333, -0.0143, -0.0138,\n",
       "        -0.0157,  0.0274, -0.0010, -0.0335,  0.0200, -0.0147, -0.0223, -0.0274,\n",
       "        -0.0186, -0.0198, -0.0355, -0.0143,  0.0070,  0.0251,  0.0051, -0.0294,\n",
       "        -0.0353,  0.0301, -0.0348, -0.0223,  0.0132, -0.0056, -0.0257, -0.0337,\n",
       "         0.0201,  0.0121, -0.0233, -0.0273, -0.0020, -0.0290, -0.0164,  0.0250,\n",
       "         0.0037, -0.0117,  0.0177, -0.0004,  0.0110,  0.0022, -0.0138,  0.0046,\n",
       "         0.0185,  0.0131, -0.0232,  0.0354,  0.0308, -0.0186, -0.0210, -0.0224,\n",
       "        -0.0283,  0.0098,  0.0327, -0.0010, -0.0172,  0.0291,  0.0238, -0.0345,\n",
       "         0.0316, -0.0313,  0.0287, -0.0274, -0.0138,  0.0182, -0.0250,  0.0175,\n",
       "         0.0185, -0.0245, -0.0211,  0.0265, -0.0152, -0.0060, -0.0166,  0.0355,\n",
       "         0.0296,  0.0020,  0.0106, -0.0139,  0.0238,  0.0249, -0.0213, -0.0337,\n",
       "         0.0181, -0.0133,  0.0182, -0.0171, -0.0018, -0.0070, -0.0094,  0.0219,\n",
       "         0.0267, -0.0119, -0.0185, -0.0094,  0.0282,  0.0267, -0.0272,  0.0296,\n",
       "        -0.0020,  0.0292,  0.0184,  0.0030,  0.0329,  0.0041,  0.0059, -0.0133,\n",
       "        -0.0219,  0.0264,  0.0336, -0.0140,  0.0041, -0.0293,  0.0037,  0.0021,\n",
       "         0.0341, -0.0184, -0.0336,  0.0084,  0.0034, -0.0121, -0.0214,  0.0102,\n",
       "         0.0341,  0.0161, -0.0278,  0.0240, -0.0293, -0.0139,  0.0194, -0.0024,\n",
       "         0.0246,  0.0021, -0.0305,  0.0084], requires_grad=True)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 40
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:50:39.468137Z",
     "start_time": "2025-01-16T10:50:39.464400Z"
    }
   },
   "cell_type": "code",
   "source": "model.state_dict().keys() #模型参数名",
   "id": "3f1d9fed096af529",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "odict_keys(['linear_relu_stack.0.weight', 'linear_relu_stack.0.bias', 'linear_relu_stack.2.weight', 'linear_relu_stack.2.bias', 'linear_relu_stack.4.weight', 'linear_relu_stack.4.bias'])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 41
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:54:17.818048Z",
     "start_time": "2025-01-16T10:50:50.661427Z"
    }
   },
   "cell_type": "code",
   "source": [
    "model = model.to(device)\n",
    "record = training(\n",
    "    model,\n",
    "    train_loader,\n",
    "    val_loader,\n",
    "    epoch,\n",
    "    loss_fct,\n",
    "    optimizer,\n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=1000\n",
    "    )"
   ],
   "id": "f3f6d0bcd4520d44",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "  0%|          | 0/187500 [00:00<?, ?it/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "b0629cafb1234e19814b6a3ca47eef7a"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Early stop at epoch 20 / global_step 39000\n"
     ]
    }
   ],
   "execution_count": 42
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:55:39.982329Z",
     "start_time": "2025-01-16T10:55:39.978723Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#帮我写个enumerate例子\n",
    "for i, item in enumerate([\"a\", \"b\", \"c\"]):\n",
    "    print(i, item)"
   ],
   "id": "cbcc2c425066bc05",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 a\n",
      "1 b\n",
      "2 c\n"
     ]
    }
   ],
   "execution_count": 44
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:55:42.413372Z",
     "start_time": "2025-01-16T10:55:42.364679Z"
    }
   },
   "cell_type": "code",
   "source": "record",
   "id": "157eac18983f2fd2",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'train': [{'loss': 2.307147264480591, 'acc': 0.15625, 'step': 0},\n",
       "  {'loss': 2.2793326377868652, 'acc': 0.09375, 'step': 1},\n",
       "  {'loss': 2.2800211906433105, 'acc': 0.15625, 'step': 2},\n",
       "  {'loss': 2.3056492805480957, 'acc': 0.125, 'step': 3},\n",
       "  {'loss': 2.322890281677246, 'acc': 0.09375, 'step': 4},\n",
       "  {'loss': 2.2942113876342773, 'acc': 0.1875, 'step': 5},\n",
       "  {'loss': 2.274050712585449, 'acc': 0.28125, 'step': 6},\n",
       "  {'loss': 2.308065414428711, 'acc': 0.09375, 'step': 7},\n",
       "  {'loss': 2.2956135272979736, 'acc': 0.1875, 'step': 8},\n",
       "  {'loss': 2.288292169570923, 'acc': 0.28125, 'step': 9},\n",
       "  {'loss': 2.2985010147094727, 'acc': 0.09375, 'step': 10},\n",
       "  {'loss': 2.296473979949951, 'acc': 0.0625, 'step': 11},\n",
       "  {'loss': 2.2863383293151855, 'acc': 0.1875, 'step': 12},\n",
       "  {'loss': 2.287076711654663, 'acc': 0.1875, 'step': 13},\n",
       "  {'loss': 2.2943854331970215, 'acc': 0.09375, 'step': 14},\n",
       "  {'loss': 2.2819745540618896, 'acc': 0.28125, 'step': 15},\n",
       "  {'loss': 2.286092758178711, 'acc': 0.21875, 'step': 16},\n",
       "  {'loss': 2.2709414958953857, 'acc': 0.1875, 'step': 17},\n",
       "  {'loss': 2.293203353881836, 'acc': 0.1875, 'step': 18},\n",
       "  {'loss': 2.2847468852996826, 'acc': 0.15625, 'step': 19},\n",
       "  {'loss': 2.288938045501709, 'acc': 0.15625, 'step': 20},\n",
       "  {'loss': 2.2622318267822266, 'acc': 0.3125, 'step': 21},\n",
       "  {'loss': 2.2822976112365723, 'acc': 0.21875, 'step': 22},\n",
       "  {'loss': 2.2553842067718506, 'acc': 0.3125, 'step': 23},\n",
       "  {'loss': 2.2790520191192627, 'acc': 0.1875, 'step': 24},\n",
       "  {'loss': 2.2857706546783447, 'acc': 0.21875, 'step': 25},\n",
       "  {'loss': 2.2686851024627686, 'acc': 0.25, 'step': 26},\n",
       "  {'loss': 2.2751259803771973, 'acc': 0.15625, 'step': 27},\n",
       "  {'loss': 2.2615604400634766, 'acc': 0.28125, 'step': 28},\n",
       "  {'loss': 2.2522776126861572, 'acc': 0.125, 'step': 29},\n",
       "  {'loss': 2.2976889610290527, 'acc': 0.125, 'step': 30},\n",
       "  {'loss': 2.2944655418395996, 'acc': 0.0625, 'step': 31},\n",
       "  {'loss': 2.27724027633667, 'acc': 0.125, 'step': 32},\n",
       "  {'loss': 2.254702091217041, 'acc': 0.21875, 'step': 33},\n",
       "  {'loss': 2.2716774940490723, 'acc': 0.21875, 'step': 34},\n",
       "  {'loss': 2.232226610183716, 'acc': 0.40625, 'step': 35},\n",
       "  {'loss': 2.270164966583252, 'acc': 0.15625, 'step': 36},\n",
       "  {'loss': 2.28747296333313, 'acc': 0.15625, 'step': 37},\n",
       "  {'loss': 2.27120041847229, 'acc': 0.1875, 'step': 38},\n",
       "  {'loss': 2.2818329334259033, 'acc': 0.15625, 'step': 39},\n",
       "  {'loss': 2.259084463119507, 'acc': 0.21875, 'step': 40},\n",
       "  {'loss': 2.2870607376098633, 'acc': 0.1875, 'step': 41},\n",
       "  {'loss': 2.2740519046783447, 'acc': 0.125, 'step': 42},\n",
       "  {'loss': 2.2685678005218506, 'acc': 0.25, 'step': 43},\n",
       "  {'loss': 2.2845418453216553, 'acc': 0.15625, 'step': 44},\n",
       "  {'loss': 2.248798370361328, 'acc': 0.28125, 'step': 45},\n",
       "  {'loss': 2.2683887481689453, 'acc': 0.21875, 'step': 46},\n",
       "  {'loss': 2.2747604846954346, 'acc': 0.21875, 'step': 47},\n",
       "  {'loss': 2.2275161743164062, 'acc': 0.25, 'step': 48},\n",
       "  {'loss': 2.2689571380615234, 'acc': 0.15625, 'step': 49},\n",
       "  {'loss': 2.2531490325927734, 'acc': 0.21875, 'step': 50},\n",
       "  {'loss': 2.2316017150878906, 'acc': 0.1875, 'step': 51},\n",
       "  {'loss': 2.2645883560180664, 'acc': 0.3125, 'step': 52},\n",
       "  {'loss': 2.2452564239501953, 'acc': 0.25, 'step': 53},\n",
       "  {'loss': 2.2628252506256104, 'acc': 0.125, 'step': 54},\n",
       "  {'loss': 2.239511013031006, 'acc': 0.21875, 'step': 55},\n",
       "  {'loss': 2.2557930946350098, 'acc': 0.15625, 'step': 56},\n",
       "  {'loss': 2.246000051498413, 'acc': 0.28125, 'step': 57},\n",
       "  {'loss': 2.2717347145080566, 'acc': 0.125, 'step': 58},\n",
       "  {'loss': 2.236692190170288, 'acc': 0.3125, 'step': 59},\n",
       "  {'loss': 2.2477505207061768, 'acc': 0.21875, 'step': 60},\n",
       "  {'loss': 2.2606375217437744, 'acc': 0.0625, 'step': 61},\n",
       "  {'loss': 2.245826005935669, 'acc': 0.125, 'step': 62},\n",
       "  {'loss': 2.23319411277771, 'acc': 0.1875, 'step': 63},\n",
       "  {'loss': 2.226783275604248, 'acc': 0.3125, 'step': 64},\n",
       "  {'loss': 2.2562413215637207, 'acc': 0.03125, 'step': 65},\n",
       "  {'loss': 2.243635654449463, 'acc': 0.09375, 'step': 66},\n",
       "  {'loss': 2.2430155277252197, 'acc': 0.1875, 'step': 67},\n",
       "  {'loss': 2.254364252090454, 'acc': 0.1875, 'step': 68},\n",
       "  {'loss': 2.2468461990356445, 'acc': 0.21875, 'step': 69},\n",
       "  {'loss': 2.243276596069336, 'acc': 0.15625, 'step': 70},\n",
       "  {'loss': 2.257699966430664, 'acc': 0.125, 'step': 71},\n",
       "  {'loss': 2.2345430850982666, 'acc': 0.25, 'step': 72},\n",
       "  {'loss': 2.24849009513855, 'acc': 0.25, 'step': 73},\n",
       "  {'loss': 2.214797258377075, 'acc': 0.375, 'step': 74},\n",
       "  {'loss': 2.244814872741699, 'acc': 0.1875, 'step': 75},\n",
       "  {'loss': 2.2478439807891846, 'acc': 0.1875, 'step': 76},\n",
       "  {'loss': 2.232001781463623, 'acc': 0.15625, 'step': 77},\n",
       "  {'loss': 2.2391629219055176, 'acc': 0.1875, 'step': 78},\n",
       "  {'loss': 2.236818552017212, 'acc': 0.25, 'step': 79},\n",
       "  {'loss': 2.228119373321533, 'acc': 0.125, 'step': 80},\n",
       "  {'loss': 2.2311971187591553, 'acc': 0.125, 'step': 81},\n",
       "  {'loss': 2.2274224758148193, 'acc': 0.25, 'step': 82},\n",
       "  {'loss': 2.209651231765747, 'acc': 0.3125, 'step': 83},\n",
       "  {'loss': 2.2103352546691895, 'acc': 0.3125, 'step': 84},\n",
       "  {'loss': 2.2342140674591064, 'acc': 0.1875, 'step': 85},\n",
       "  {'loss': 2.22444748878479, 'acc': 0.21875, 'step': 86},\n",
       "  {'loss': 2.2147367000579834, 'acc': 0.1875, 'step': 87},\n",
       "  {'loss': 2.2236380577087402, 'acc': 0.125, 'step': 88},\n",
       "  {'loss': 2.2442328929901123, 'acc': 0.09375, 'step': 89},\n",
       "  {'loss': 2.2483880519866943, 'acc': 0.09375, 'step': 90},\n",
       "  {'loss': 2.2185068130493164, 'acc': 0.1875, 'step': 91},\n",
       "  {'loss': 2.218848705291748, 'acc': 0.25, 'step': 92},\n",
       "  {'loss': 2.2045631408691406, 'acc': 0.34375, 'step': 93},\n",
       "  {'loss': 2.2268099784851074, 'acc': 0.125, 'step': 94},\n",
       "  {'loss': 2.2094082832336426, 'acc': 0.3125, 'step': 95},\n",
       "  {'loss': 2.2059850692749023, 'acc': 0.1875, 'step': 96},\n",
       "  {'loss': 2.2660329341888428, 'acc': 0.15625, 'step': 97},\n",
       "  {'loss': 2.2407286167144775, 'acc': 0.125, 'step': 98},\n",
       "  {'loss': 2.2337028980255127, 'acc': 0.1875, 'step': 99},\n",
       "  {'loss': 2.190647840499878, 'acc': 0.3125, 'step': 100},\n",
       "  {'loss': 2.2393012046813965, 'acc': 0.1875, 'step': 101},\n",
       "  {'loss': 2.187324047088623, 'acc': 0.1875, 'step': 102},\n",
       "  {'loss': 2.1568679809570312, 'acc': 0.25, 'step': 103},\n",
       "  {'loss': 2.151583194732666, 'acc': 0.34375, 'step': 104},\n",
       "  {'loss': 2.2085909843444824, 'acc': 0.3125, 'step': 105},\n",
       "  {'loss': 2.1968512535095215, 'acc': 0.40625, 'step': 106},\n",
       "  {'loss': 2.211167573928833, 'acc': 0.25, 'step': 107},\n",
       "  {'loss': 2.2208456993103027, 'acc': 0.3125, 'step': 108},\n",
       "  {'loss': 2.1667606830596924, 'acc': 0.1875, 'step': 109},\n",
       "  {'loss': 2.1768088340759277, 'acc': 0.3125, 'step': 110},\n",
       "  {'loss': 2.205498456954956, 'acc': 0.25, 'step': 111},\n",
       "  {'loss': 2.1844186782836914, 'acc': 0.3125, 'step': 112},\n",
       "  {'loss': 2.1933255195617676, 'acc': 0.3125, 'step': 113},\n",
       "  {'loss': 2.1777422428131104, 'acc': 0.25, 'step': 114},\n",
       "  {'loss': 2.186000108718872, 'acc': 0.25, 'step': 115},\n",
       "  {'loss': 2.1923747062683105, 'acc': 0.3125, 'step': 116},\n",
       "  {'loss': 2.2106728553771973, 'acc': 0.25, 'step': 117},\n",
       "  {'loss': 2.2247469425201416, 'acc': 0.09375, 'step': 118},\n",
       "  {'loss': 2.1882550716400146, 'acc': 0.25, 'step': 119},\n",
       "  {'loss': 2.185753345489502, 'acc': 0.1875, 'step': 120},\n",
       "  {'loss': 2.2026073932647705, 'acc': 0.40625, 'step': 121},\n",
       "  {'loss': 2.1697230339050293, 'acc': 0.28125, 'step': 122},\n",
       "  {'loss': 2.2069523334503174, 'acc': 0.25, 'step': 123},\n",
       "  {'loss': 2.2143633365631104, 'acc': 0.15625, 'step': 124},\n",
       "  {'loss': 2.1932592391967773, 'acc': 0.25, 'step': 125},\n",
       "  {'loss': 2.1180946826934814, 'acc': 0.34375, 'step': 126},\n",
       "  {'loss': 2.1509385108947754, 'acc': 0.25, 'step': 127},\n",
       "  {'loss': 2.168085813522339, 'acc': 0.3125, 'step': 128},\n",
       "  {'loss': 2.2083864212036133, 'acc': 0.09375, 'step': 129},\n",
       "  {'loss': 2.1871097087860107, 'acc': 0.125, 'step': 130},\n",
       "  {'loss': 2.1426634788513184, 'acc': 0.34375, 'step': 131},\n",
       "  {'loss': 2.168383836746216, 'acc': 0.34375, 'step': 132},\n",
       "  {'loss': 2.1606833934783936, 'acc': 0.28125, 'step': 133},\n",
       "  {'loss': 2.129455089569092, 'acc': 0.25, 'step': 134},\n",
       "  {'loss': 2.1676559448242188, 'acc': 0.375, 'step': 135},\n",
       "  {'loss': 2.165088415145874, 'acc': 0.25, 'step': 136},\n",
       "  {'loss': 2.139540195465088, 'acc': 0.34375, 'step': 137},\n",
       "  {'loss': 2.133105516433716, 'acc': 0.28125, 'step': 138},\n",
       "  {'loss': 2.139815330505371, 'acc': 0.28125, 'step': 139},\n",
       "  {'loss': 2.122061014175415, 'acc': 0.40625, 'step': 140},\n",
       "  {'loss': 2.16566801071167, 'acc': 0.21875, 'step': 141},\n",
       "  {'loss': 2.1423628330230713, 'acc': 0.34375, 'step': 142},\n",
       "  {'loss': 2.120741844177246, 'acc': 0.1875, 'step': 143},\n",
       "  {'loss': 2.1236648559570312, 'acc': 0.375, 'step': 144},\n",
       "  {'loss': 2.0874838829040527, 'acc': 0.375, 'step': 145},\n",
       "  {'loss': 2.1495742797851562, 'acc': 0.40625, 'step': 146},\n",
       "  {'loss': 2.1339523792266846, 'acc': 0.28125, 'step': 147},\n",
       "  {'loss': 2.1448237895965576, 'acc': 0.375, 'step': 148},\n",
       "  {'loss': 2.1233925819396973, 'acc': 0.34375, 'step': 149},\n",
       "  {'loss': 2.0902671813964844, 'acc': 0.375, 'step': 150},\n",
       "  {'loss': 2.1456716060638428, 'acc': 0.25, 'step': 151},\n",
       "  {'loss': 2.1531918048858643, 'acc': 0.21875, 'step': 152},\n",
       "  {'loss': 2.120223045349121, 'acc': 0.28125, 'step': 153},\n",
       "  {'loss': 2.1604807376861572, 'acc': 0.34375, 'step': 154},\n",
       "  {'loss': 2.1147093772888184, 'acc': 0.34375, 'step': 155},\n",
       "  {'loss': 2.1080029010772705, 'acc': 0.34375, 'step': 156},\n",
       "  {'loss': 2.0609753131866455, 'acc': 0.53125, 'step': 157},\n",
       "  {'loss': 2.1248645782470703, 'acc': 0.375, 'step': 158},\n",
       "  {'loss': 2.154980182647705, 'acc': 0.28125, 'step': 159},\n",
       "  {'loss': 2.1576809883117676, 'acc': 0.40625, 'step': 160},\n",
       "  {'loss': 2.0820398330688477, 'acc': 0.375, 'step': 161},\n",
       "  {'loss': 2.0868775844573975, 'acc': 0.28125, 'step': 162},\n",
       "  {'loss': 2.0998284816741943, 'acc': 0.40625, 'step': 163},\n",
       "  {'loss': 2.117577314376831, 'acc': 0.34375, 'step': 164},\n",
       "  {'loss': 2.090496301651001, 'acc': 0.28125, 'step': 165},\n",
       "  {'loss': 2.133600950241089, 'acc': 0.28125, 'step': 166},\n",
       "  {'loss': 2.1064436435699463, 'acc': 0.46875, 'step': 167},\n",
       "  {'loss': 2.0307092666625977, 'acc': 0.46875, 'step': 168},\n",
       "  {'loss': 2.1141934394836426, 'acc': 0.34375, 'step': 169},\n",
       "  {'loss': 2.106532096862793, 'acc': 0.21875, 'step': 170},\n",
       "  {'loss': 2.107490062713623, 'acc': 0.4375, 'step': 171},\n",
       "  {'loss': 2.082010269165039, 'acc': 0.3125, 'step': 172},\n",
       "  {'loss': 2.09717059135437, 'acc': 0.40625, 'step': 173},\n",
       "  {'loss': 2.114344596862793, 'acc': 0.25, 'step': 174},\n",
       "  {'loss': 2.1402690410614014, 'acc': 0.3125, 'step': 175},\n",
       "  {'loss': 2.0719683170318604, 'acc': 0.40625, 'step': 176},\n",
       "  {'loss': 2.108612298965454, 'acc': 0.25, 'step': 177},\n",
       "  {'loss': 2.093188762664795, 'acc': 0.375, 'step': 178},\n",
       "  {'loss': 2.114919424057007, 'acc': 0.375, 'step': 179},\n",
       "  {'loss': 2.0117318630218506, 'acc': 0.375, 'step': 180},\n",
       "  {'loss': 2.128802537918091, 'acc': 0.34375, 'step': 181},\n",
       "  {'loss': 2.1141066551208496, 'acc': 0.3125, 'step': 182},\n",
       "  {'loss': 2.034979820251465, 'acc': 0.46875, 'step': 183},\n",
       "  {'loss': 2.0398061275482178, 'acc': 0.46875, 'step': 184},\n",
       "  {'loss': 2.020808458328247, 'acc': 0.4375, 'step': 185},\n",
       "  {'loss': 2.097777843475342, 'acc': 0.21875, 'step': 186},\n",
       "  {'loss': 2.0327703952789307, 'acc': 0.25, 'step': 187},\n",
       "  {'loss': 2.0419397354125977, 'acc': 0.34375, 'step': 188},\n",
       "  {'loss': 2.0569534301757812, 'acc': 0.3125, 'step': 189},\n",
       "  {'loss': 2.064859628677368, 'acc': 0.40625, 'step': 190},\n",
       "  {'loss': 2.064736843109131, 'acc': 0.34375, 'step': 191},\n",
       "  {'loss': 2.051361322402954, 'acc': 0.46875, 'step': 192},\n",
       "  {'loss': 2.068580389022827, 'acc': 0.34375, 'step': 193},\n",
       "  {'loss': 2.032783031463623, 'acc': 0.375, 'step': 194},\n",
       "  {'loss': 2.0305683612823486, 'acc': 0.3125, 'step': 195},\n",
       "  {'loss': 2.068647861480713, 'acc': 0.25, 'step': 196},\n",
       "  {'loss': 2.030834197998047, 'acc': 0.3125, 'step': 197},\n",
       "  {'loss': 2.031113624572754, 'acc': 0.4375, 'step': 198},\n",
       "  {'loss': 2.0220401287078857, 'acc': 0.375, 'step': 199},\n",
       "  {'loss': 2.0364983081817627, 'acc': 0.34375, 'step': 200},\n",
       "  {'loss': 2.0141854286193848, 'acc': 0.3125, 'step': 201},\n",
       "  {'loss': 1.9752192497253418, 'acc': 0.3125, 'step': 202},\n",
       "  {'loss': 1.9738737344741821, 'acc': 0.375, 'step': 203},\n",
       "  {'loss': 2.0193867683410645, 'acc': 0.375, 'step': 204},\n",
       "  {'loss': 2.01420259475708, 'acc': 0.21875, 'step': 205},\n",
       "  {'loss': 2.024237632751465, 'acc': 0.34375, 'step': 206},\n",
       "  {'loss': 2.0306122303009033, 'acc': 0.3125, 'step': 207},\n",
       "  {'loss': 2.0594263076782227, 'acc': 0.15625, 'step': 208},\n",
       "  {'loss': 2.0518157482147217, 'acc': 0.28125, 'step': 209},\n",
       "  {'loss': 1.985013723373413, 'acc': 0.375, 'step': 210},\n",
       "  {'loss': 2.0556294918060303, 'acc': 0.1875, 'step': 211},\n",
       "  {'loss': 1.957789421081543, 'acc': 0.4375, 'step': 212},\n",
       "  {'loss': 2.0281500816345215, 'acc': 0.3125, 'step': 213},\n",
       "  {'loss': 2.0144574642181396, 'acc': 0.25, 'step': 214},\n",
       "  {'loss': 1.9650859832763672, 'acc': 0.4375, 'step': 215},\n",
       "  {'loss': 1.941008448600769, 'acc': 0.375, 'step': 216},\n",
       "  {'loss': 1.9358209371566772, 'acc': 0.46875, 'step': 217},\n",
       "  {'loss': 2.038386344909668, 'acc': 0.375, 'step': 218},\n",
       "  {'loss': 1.990351915359497, 'acc': 0.40625, 'step': 219},\n",
       "  {'loss': 1.9382081031799316, 'acc': 0.5, 'step': 220},\n",
       "  {'loss': 1.9351871013641357, 'acc': 0.40625, 'step': 221},\n",
       "  {'loss': 1.9419536590576172, 'acc': 0.375, 'step': 222},\n",
       "  {'loss': 1.9783084392547607, 'acc': 0.375, 'step': 223},\n",
       "  {'loss': 1.9510681629180908, 'acc': 0.28125, 'step': 224},\n",
       "  {'loss': 1.9649913311004639, 'acc': 0.4375, 'step': 225},\n",
       "  {'loss': 1.994104027748108, 'acc': 0.34375, 'step': 226},\n",
       "  {'loss': 1.939574956893921, 'acc': 0.46875, 'step': 227},\n",
       "  {'loss': 2.0052404403686523, 'acc': 0.3125, 'step': 228},\n",
       "  {'loss': 1.9776360988616943, 'acc': 0.25, 'step': 229},\n",
       "  {'loss': 1.9663795232772827, 'acc': 0.4375, 'step': 230},\n",
       "  {'loss': 1.9773093461990356, 'acc': 0.28125, 'step': 231},\n",
       "  {'loss': 1.9012339115142822, 'acc': 0.46875, 'step': 232},\n",
       "  {'loss': 1.9221343994140625, 'acc': 0.28125, 'step': 233},\n",
       "  {'loss': 1.9224892854690552, 'acc': 0.40625, 'step': 234},\n",
       "  {'loss': 1.988816738128662, 'acc': 0.375, 'step': 235},\n",
       "  {'loss': 1.9167026281356812, 'acc': 0.375, 'step': 236},\n",
       "  {'loss': 1.9107794761657715, 'acc': 0.4375, 'step': 237},\n",
       "  {'loss': 1.9162126779556274, 'acc': 0.28125, 'step': 238},\n",
       "  {'loss': 1.883475422859192, 'acc': 0.34375, 'step': 239},\n",
       "  {'loss': 1.8550879955291748, 'acc': 0.4375, 'step': 240},\n",
       "  {'loss': 1.8882416486740112, 'acc': 0.53125, 'step': 241},\n",
       "  {'loss': 1.9228127002716064, 'acc': 0.3125, 'step': 242},\n",
       "  {'loss': 1.8974241018295288, 'acc': 0.34375, 'step': 243},\n",
       "  {'loss': 1.851319670677185, 'acc': 0.4375, 'step': 244},\n",
       "  {'loss': 1.938942551612854, 'acc': 0.25, 'step': 245},\n",
       "  {'loss': 1.8831535577774048, 'acc': 0.4375, 'step': 246},\n",
       "  {'loss': 1.9309382438659668, 'acc': 0.25, 'step': 247},\n",
       "  {'loss': 1.9228256940841675, 'acc': 0.375, 'step': 248},\n",
       "  {'loss': 1.96238112449646, 'acc': 0.34375, 'step': 249},\n",
       "  {'loss': 1.9543962478637695, 'acc': 0.34375, 'step': 250},\n",
       "  {'loss': 1.900199055671692, 'acc': 0.375, 'step': 251},\n",
       "  {'loss': 1.9108854532241821, 'acc': 0.40625, 'step': 252},\n",
       "  {'loss': 1.9902929067611694, 'acc': 0.25, 'step': 253},\n",
       "  {'loss': 1.706719994544983, 'acc': 0.625, 'step': 254},\n",
       "  {'loss': 1.898508906364441, 'acc': 0.375, 'step': 255},\n",
       "  {'loss': 1.893648624420166, 'acc': 0.28125, 'step': 256},\n",
       "  {'loss': 1.890842318534851, 'acc': 0.25, 'step': 257},\n",
       "  {'loss': 1.8736767768859863, 'acc': 0.5, 'step': 258},\n",
       "  {'loss': 1.7472468614578247, 'acc': 0.625, 'step': 259},\n",
       "  {'loss': 1.8343546390533447, 'acc': 0.5, 'step': 260},\n",
       "  {'loss': 1.8265143632888794, 'acc': 0.4375, 'step': 261},\n",
       "  {'loss': 1.7380508184432983, 'acc': 0.59375, 'step': 262},\n",
       "  {'loss': 1.776071310043335, 'acc': 0.375, 'step': 263},\n",
       "  {'loss': 1.908439040184021, 'acc': 0.3125, 'step': 264},\n",
       "  {'loss': 1.7995085716247559, 'acc': 0.46875, 'step': 265},\n",
       "  {'loss': 1.84882652759552, 'acc': 0.53125, 'step': 266},\n",
       "  {'loss': 1.8658950328826904, 'acc': 0.40625, 'step': 267},\n",
       "  {'loss': 1.8881771564483643, 'acc': 0.46875, 'step': 268},\n",
       "  {'loss': 1.7076654434204102, 'acc': 0.53125, 'step': 269},\n",
       "  {'loss': 1.8562405109405518, 'acc': 0.46875, 'step': 270},\n",
       "  {'loss': 1.878240942955017, 'acc': 0.34375, 'step': 271},\n",
       "  {'loss': 1.8652716875076294, 'acc': 0.375, 'step': 272},\n",
       "  {'loss': 1.884028434753418, 'acc': 0.5625, 'step': 273},\n",
       "  {'loss': 1.8515962362289429, 'acc': 0.53125, 'step': 274},\n",
       "  {'loss': 1.7629669904708862, 'acc': 0.59375, 'step': 275},\n",
       "  {'loss': 1.7415521144866943, 'acc': 0.59375, 'step': 276},\n",
       "  {'loss': 1.7286466360092163, 'acc': 0.59375, 'step': 277},\n",
       "  {'loss': 1.902195692062378, 'acc': 0.46875, 'step': 278},\n",
       "  {'loss': 1.7525237798690796, 'acc': 0.625, 'step': 279},\n",
       "  {'loss': 1.6839219331741333, 'acc': 0.65625, 'step': 280},\n",
       "  {'loss': 1.6465200185775757, 'acc': 0.59375, 'step': 281},\n",
       "  {'loss': 1.703456163406372, 'acc': 0.6875, 'step': 282},\n",
       "  {'loss': 1.813950777053833, 'acc': 0.59375, 'step': 283},\n",
       "  {'loss': 1.7877761125564575, 'acc': 0.53125, 'step': 284},\n",
       "  {'loss': 1.7261159420013428, 'acc': 0.59375, 'step': 285},\n",
       "  {'loss': 1.7006455659866333, 'acc': 0.53125, 'step': 286},\n",
       "  {'loss': 1.8236796855926514, 'acc': 0.4375, 'step': 287},\n",
       "  {'loss': 1.7614949941635132, 'acc': 0.625, 'step': 288},\n",
       "  {'loss': 1.7107149362564087, 'acc': 0.65625, 'step': 289},\n",
       "  {'loss': 1.8636144399642944, 'acc': 0.34375, 'step': 290},\n",
       "  {'loss': 1.7055574655532837, 'acc': 0.53125, 'step': 291},\n",
       "  {'loss': 1.576805830001831, 'acc': 0.84375, 'step': 292},\n",
       "  {'loss': 1.8107845783233643, 'acc': 0.375, 'step': 293},\n",
       "  {'loss': 1.7913663387298584, 'acc': 0.5, 'step': 294},\n",
       "  {'loss': 1.6721135377883911, 'acc': 0.59375, 'step': 295},\n",
       "  {'loss': 1.7396143674850464, 'acc': 0.53125, 'step': 296},\n",
       "  {'loss': 1.7735077142715454, 'acc': 0.53125, 'step': 297},\n",
       "  {'loss': 1.6533989906311035, 'acc': 0.6875, 'step': 298},\n",
       "  {'loss': 1.7170555591583252, 'acc': 0.53125, 'step': 299},\n",
       "  {'loss': 1.7731822729110718, 'acc': 0.46875, 'step': 300},\n",
       "  {'loss': 1.739903450012207, 'acc': 0.5, 'step': 301},\n",
       "  {'loss': 1.8465406894683838, 'acc': 0.375, 'step': 302},\n",
       "  {'loss': 1.7486929893493652, 'acc': 0.46875, 'step': 303},\n",
       "  {'loss': 1.7695517539978027, 'acc': 0.34375, 'step': 304},\n",
       "  {'loss': 1.5552785396575928, 'acc': 0.625, 'step': 305},\n",
       "  {'loss': 1.6184004545211792, 'acc': 0.53125, 'step': 306},\n",
       "  {'loss': 1.599755048751831, 'acc': 0.59375, 'step': 307},\n",
       "  {'loss': 1.726854681968689, 'acc': 0.5625, 'step': 308},\n",
       "  {'loss': 1.7490452527999878, 'acc': 0.34375, 'step': 309},\n",
       "  {'loss': 1.5490880012512207, 'acc': 0.6875, 'step': 310},\n",
       "  {'loss': 1.6602636575698853, 'acc': 0.53125, 'step': 311},\n",
       "  {'loss': 1.7314027547836304, 'acc': 0.5, 'step': 312},\n",
       "  {'loss': 1.7557053565979004, 'acc': 0.375, 'step': 313},\n",
       "  {'loss': 1.6969634294509888, 'acc': 0.5625, 'step': 314},\n",
       "  {'loss': 1.5962380170822144, 'acc': 0.6875, 'step': 315},\n",
       "  {'loss': 1.5846022367477417, 'acc': 0.65625, 'step': 316},\n",
       "  {'loss': 1.6430368423461914, 'acc': 0.65625, 'step': 317},\n",
       "  {'loss': 1.7192013263702393, 'acc': 0.375, 'step': 318},\n",
       "  {'loss': 1.6961685419082642, 'acc': 0.4375, 'step': 319},\n",
       "  {'loss': 1.6482704877853394, 'acc': 0.5625, 'step': 320},\n",
       "  {'loss': 1.5782952308654785, 'acc': 0.5625, 'step': 321},\n",
       "  {'loss': 1.6430730819702148, 'acc': 0.46875, 'step': 322},\n",
       "  {'loss': 1.6317112445831299, 'acc': 0.5625, 'step': 323},\n",
       "  {'loss': 1.6407365798950195, 'acc': 0.5625, 'step': 324},\n",
       "  {'loss': 1.5173935890197754, 'acc': 0.59375, 'step': 325},\n",
       "  {'loss': 1.6528747081756592, 'acc': 0.4375, 'step': 326},\n",
       "  {'loss': 1.5706520080566406, 'acc': 0.5, 'step': 327},\n",
       "  {'loss': 1.6036792993545532, 'acc': 0.53125, 'step': 328},\n",
       "  {'loss': 1.5723702907562256, 'acc': 0.46875, 'step': 329},\n",
       "  {'loss': 1.6150144338607788, 'acc': 0.5, 'step': 330},\n",
       "  {'loss': 1.6341640949249268, 'acc': 0.5, 'step': 331},\n",
       "  {'loss': 1.685654640197754, 'acc': 0.46875, 'step': 332},\n",
       "  {'loss': 1.6925612688064575, 'acc': 0.46875, 'step': 333},\n",
       "  {'loss': 1.5874159336090088, 'acc': 0.625, 'step': 334},\n",
       "  {'loss': 1.622427225112915, 'acc': 0.4375, 'step': 335},\n",
       "  {'loss': 1.6210250854492188, 'acc': 0.5, 'step': 336},\n",
       "  {'loss': 1.4882065057754517, 'acc': 0.625, 'step': 337},\n",
       "  {'loss': 1.7079432010650635, 'acc': 0.5, 'step': 338},\n",
       "  {'loss': 1.6176033020019531, 'acc': 0.5625, 'step': 339},\n",
       "  {'loss': 1.623093605041504, 'acc': 0.5625, 'step': 340},\n",
       "  {'loss': 1.6187530755996704, 'acc': 0.53125, 'step': 341},\n",
       "  {'loss': 1.5262959003448486, 'acc': 0.5, 'step': 342},\n",
       "  {'loss': 1.6484007835388184, 'acc': 0.375, 'step': 343},\n",
       "  {'loss': 1.5836303234100342, 'acc': 0.40625, 'step': 344},\n",
       "  {'loss': 1.5673149824142456, 'acc': 0.46875, 'step': 345},\n",
       "  {'loss': 1.4535986185073853, 'acc': 0.65625, 'step': 346},\n",
       "  {'loss': 1.5936174392700195, 'acc': 0.5625, 'step': 347},\n",
       "  {'loss': 1.631850004196167, 'acc': 0.46875, 'step': 348},\n",
       "  {'loss': 1.6232548952102661, 'acc': 0.4375, 'step': 349},\n",
       "  {'loss': 1.4542884826660156, 'acc': 0.625, 'step': 350},\n",
       "  {'loss': 1.6266648769378662, 'acc': 0.46875, 'step': 351},\n",
       "  {'loss': 1.5101196765899658, 'acc': 0.59375, 'step': 352},\n",
       "  {'loss': 1.6478140354156494, 'acc': 0.53125, 'step': 353},\n",
       "  {'loss': 1.4426698684692383, 'acc': 0.625, 'step': 354},\n",
       "  {'loss': 1.602502703666687, 'acc': 0.5625, 'step': 355},\n",
       "  {'loss': 1.4960697889328003, 'acc': 0.53125, 'step': 356},\n",
       "  {'loss': 1.6394492387771606, 'acc': 0.59375, 'step': 357},\n",
       "  {'loss': 1.570115089416504, 'acc': 0.4375, 'step': 358},\n",
       "  {'loss': 1.45924711227417, 'acc': 0.59375, 'step': 359},\n",
       "  {'loss': 1.4074512720108032, 'acc': 0.6875, 'step': 360},\n",
       "  {'loss': 1.3403878211975098, 'acc': 0.75, 'step': 361},\n",
       "  {'loss': 1.4684442281723022, 'acc': 0.53125, 'step': 362},\n",
       "  {'loss': 1.394940972328186, 'acc': 0.75, 'step': 363},\n",
       "  {'loss': 1.4962435960769653, 'acc': 0.5, 'step': 364},\n",
       "  {'loss': 1.5137704610824585, 'acc': 0.625, 'step': 365},\n",
       "  {'loss': 1.462059497833252, 'acc': 0.5625, 'step': 366},\n",
       "  {'loss': 1.4242454767227173, 'acc': 0.5625, 'step': 367},\n",
       "  {'loss': 1.4541383981704712, 'acc': 0.59375, 'step': 368},\n",
       "  {'loss': 1.5389299392700195, 'acc': 0.5, 'step': 369},\n",
       "  {'loss': 1.483865737915039, 'acc': 0.59375, 'step': 370},\n",
       "  {'loss': 1.4604504108428955, 'acc': 0.59375, 'step': 371},\n",
       "  {'loss': 1.3839802742004395, 'acc': 0.71875, 'step': 372},\n",
       "  {'loss': 1.403056025505066, 'acc': 0.65625, 'step': 373},\n",
       "  {'loss': 1.5297836065292358, 'acc': 0.625, 'step': 374},\n",
       "  {'loss': 1.3557016849517822, 'acc': 0.65625, 'step': 375},\n",
       "  {'loss': 1.4027416706085205, 'acc': 0.6875, 'step': 376},\n",
       "  {'loss': 1.5112260580062866, 'acc': 0.59375, 'step': 377},\n",
       "  {'loss': 1.5016077756881714, 'acc': 0.53125, 'step': 378},\n",
       "  {'loss': 1.4949300289154053, 'acc': 0.5625, 'step': 379},\n",
       "  {'loss': 1.4964056015014648, 'acc': 0.46875, 'step': 380},\n",
       "  {'loss': 1.2410330772399902, 'acc': 0.65625, 'step': 381},\n",
       "  {'loss': 1.4034532308578491, 'acc': 0.5625, 'step': 382},\n",
       "  {'loss': 1.5434638261795044, 'acc': 0.46875, 'step': 383},\n",
       "  {'loss': 1.5388315916061401, 'acc': 0.4375, 'step': 384},\n",
       "  {'loss': 1.4178025722503662, 'acc': 0.59375, 'step': 385},\n",
       "  {'loss': 1.3215643167495728, 'acc': 0.71875, 'step': 386},\n",
       "  {'loss': 1.4650312662124634, 'acc': 0.59375, 'step': 387},\n",
       "  {'loss': 1.4786608219146729, 'acc': 0.625, 'step': 388},\n",
       "  {'loss': 1.5709513425827026, 'acc': 0.40625, 'step': 389},\n",
       "  {'loss': 1.541668176651001, 'acc': 0.46875, 'step': 390},\n",
       "  {'loss': 1.4845050573349, 'acc': 0.53125, 'step': 391},\n",
       "  {'loss': 1.4001190662384033, 'acc': 0.53125, 'step': 392},\n",
       "  {'loss': 1.5800511837005615, 'acc': 0.34375, 'step': 393},\n",
       "  {'loss': 1.334458827972412, 'acc': 0.65625, 'step': 394},\n",
       "  {'loss': 1.3545180559158325, 'acc': 0.65625, 'step': 395},\n",
       "  {'loss': 1.3554730415344238, 'acc': 0.59375, 'step': 396},\n",
       "  {'loss': 1.5251127481460571, 'acc': 0.4375, 'step': 397},\n",
       "  {'loss': 1.3283350467681885, 'acc': 0.75, 'step': 398},\n",
       "  {'loss': 1.3256595134735107, 'acc': 0.625, 'step': 399},\n",
       "  {'loss': 1.3499135971069336, 'acc': 0.59375, 'step': 400},\n",
       "  {'loss': 1.3529911041259766, 'acc': 0.6875, 'step': 401},\n",
       "  {'loss': 1.397200345993042, 'acc': 0.5625, 'step': 402},\n",
       "  {'loss': 1.399937629699707, 'acc': 0.59375, 'step': 403},\n",
       "  {'loss': 1.4969381093978882, 'acc': 0.53125, 'step': 404},\n",
       "  {'loss': 1.4189649820327759, 'acc': 0.5625, 'step': 405},\n",
       "  {'loss': 1.2440013885498047, 'acc': 0.75, 'step': 406},\n",
       "  {'loss': 1.3732987642288208, 'acc': 0.59375, 'step': 407},\n",
       "  {'loss': 1.4829726219177246, 'acc': 0.53125, 'step': 408},\n",
       "  {'loss': 1.2488967180252075, 'acc': 0.71875, 'step': 409},\n",
       "  {'loss': 1.2865396738052368, 'acc': 0.65625, 'step': 410},\n",
       "  {'loss': 1.3177975416183472, 'acc': 0.71875, 'step': 411},\n",
       "  {'loss': 1.2857972383499146, 'acc': 0.625, 'step': 412},\n",
       "  {'loss': 1.2969098091125488, 'acc': 0.65625, 'step': 413},\n",
       "  {'loss': 1.3069082498550415, 'acc': 0.59375, 'step': 414},\n",
       "  {'loss': 1.2794365882873535, 'acc': 0.625, 'step': 415},\n",
       "  {'loss': 1.2528657913208008, 'acc': 0.6875, 'step': 416},\n",
       "  {'loss': 1.3240886926651, 'acc': 0.65625, 'step': 417},\n",
       "  {'loss': 1.179756760597229, 'acc': 0.75, 'step': 418},\n",
       "  {'loss': 1.3836534023284912, 'acc': 0.53125, 'step': 419},\n",
       "  {'loss': 1.312465786933899, 'acc': 0.53125, 'step': 420},\n",
       "  {'loss': 1.3872495889663696, 'acc': 0.5, 'step': 421},\n",
       "  {'loss': 1.280494213104248, 'acc': 0.59375, 'step': 422},\n",
       "  {'loss': 1.3242346048355103, 'acc': 0.625, 'step': 423},\n",
       "  {'loss': 1.3343899250030518, 'acc': 0.625, 'step': 424},\n",
       "  {'loss': 1.2806731462478638, 'acc': 0.625, 'step': 425},\n",
       "  {'loss': 1.2576563358306885, 'acc': 0.53125, 'step': 426},\n",
       "  {'loss': 1.3809071779251099, 'acc': 0.5625, 'step': 427},\n",
       "  {'loss': 1.4003804922103882, 'acc': 0.40625, 'step': 428},\n",
       "  {'loss': 1.3366550207138062, 'acc': 0.59375, 'step': 429},\n",
       "  {'loss': 1.2568751573562622, 'acc': 0.59375, 'step': 430},\n",
       "  {'loss': 1.3442025184631348, 'acc': 0.65625, 'step': 431},\n",
       "  {'loss': 1.3667658567428589, 'acc': 0.46875, 'step': 432},\n",
       "  {'loss': 1.5920048952102661, 'acc': 0.5, 'step': 433},\n",
       "  {'loss': 1.2964532375335693, 'acc': 0.65625, 'step': 434},\n",
       "  {'loss': 1.3209095001220703, 'acc': 0.59375, 'step': 435},\n",
       "  {'loss': 1.3233457803726196, 'acc': 0.5, 'step': 436},\n",
       "  {'loss': 1.311883568763733, 'acc': 0.625, 'step': 437},\n",
       "  {'loss': 1.1396872997283936, 'acc': 0.71875, 'step': 438},\n",
       "  {'loss': 1.3714040517807007, 'acc': 0.59375, 'step': 439},\n",
       "  {'loss': 1.299375295639038, 'acc': 0.46875, 'step': 440},\n",
       "  {'loss': 1.214742660522461, 'acc': 0.71875, 'step': 441},\n",
       "  {'loss': 1.4879252910614014, 'acc': 0.5625, 'step': 442},\n",
       "  {'loss': 1.2962177991867065, 'acc': 0.625, 'step': 443},\n",
       "  {'loss': 1.1522092819213867, 'acc': 0.75, 'step': 444},\n",
       "  {'loss': 1.2283084392547607, 'acc': 0.71875, 'step': 445},\n",
       "  {'loss': 1.3997009992599487, 'acc': 0.53125, 'step': 446},\n",
       "  {'loss': 1.370181679725647, 'acc': 0.65625, 'step': 447},\n",
       "  {'loss': 1.1629664897918701, 'acc': 0.65625, 'step': 448},\n",
       "  {'loss': 1.3262293338775635, 'acc': 0.5625, 'step': 449},\n",
       "  {'loss': 1.3144893646240234, 'acc': 0.53125, 'step': 450},\n",
       "  {'loss': 1.3653569221496582, 'acc': 0.5, 'step': 451},\n",
       "  {'loss': 1.1722218990325928, 'acc': 0.6875, 'step': 452},\n",
       "  {'loss': 1.245895504951477, 'acc': 0.59375, 'step': 453},\n",
       "  {'loss': 1.4429993629455566, 'acc': 0.5625, 'step': 454},\n",
       "  {'loss': 1.1285688877105713, 'acc': 0.75, 'step': 455},\n",
       "  {'loss': 1.2949477434158325, 'acc': 0.5, 'step': 456},\n",
       "  {'loss': 1.2423955202102661, 'acc': 0.71875, 'step': 457},\n",
       "  {'loss': 1.3173930644989014, 'acc': 0.625, 'step': 458},\n",
       "  {'loss': 1.3921167850494385, 'acc': 0.4375, 'step': 459},\n",
       "  {'loss': 1.2554560899734497, 'acc': 0.59375, 'step': 460},\n",
       "  {'loss': 1.1011197566986084, 'acc': 0.71875, 'step': 461},\n",
       "  {'loss': 1.407289981842041, 'acc': 0.53125, 'step': 462},\n",
       "  {'loss': 1.2108042240142822, 'acc': 0.6875, 'step': 463},\n",
       "  {'loss': 1.2301281690597534, 'acc': 0.65625, 'step': 464},\n",
       "  {'loss': 1.3181037902832031, 'acc': 0.5625, 'step': 465},\n",
       "  {'loss': 1.1500272750854492, 'acc': 0.65625, 'step': 466},\n",
       "  {'loss': 1.2011555433273315, 'acc': 0.59375, 'step': 467},\n",
       "  {'loss': 1.2998355627059937, 'acc': 0.59375, 'step': 468},\n",
       "  {'loss': 1.3256614208221436, 'acc': 0.5625, 'step': 469},\n",
       "  {'loss': 1.3632460832595825, 'acc': 0.59375, 'step': 470},\n",
       "  {'loss': 1.4480916261672974, 'acc': 0.53125, 'step': 471},\n",
       "  {'loss': 1.0707908868789673, 'acc': 0.6875, 'step': 472},\n",
       "  {'loss': 1.1111754179000854, 'acc': 0.6875, 'step': 473},\n",
       "  {'loss': 1.3105173110961914, 'acc': 0.59375, 'step': 474},\n",
       "  {'loss': 1.1395024061203003, 'acc': 0.75, 'step': 475},\n",
       "  {'loss': 1.1475205421447754, 'acc': 0.78125, 'step': 476},\n",
       "  {'loss': 1.3083206415176392, 'acc': 0.53125, 'step': 477},\n",
       "  {'loss': 1.185764193534851, 'acc': 0.625, 'step': 478},\n",
       "  {'loss': 1.228344202041626, 'acc': 0.59375, 'step': 479},\n",
       "  {'loss': 1.1190006732940674, 'acc': 0.71875, 'step': 480},\n",
       "  {'loss': 1.2752100229263306, 'acc': 0.6875, 'step': 481},\n",
       "  {'loss': 1.1885645389556885, 'acc': 0.59375, 'step': 482},\n",
       "  {'loss': 1.2003544569015503, 'acc': 0.65625, 'step': 483},\n",
       "  {'loss': 1.1738358736038208, 'acc': 0.5625, 'step': 484},\n",
       "  {'loss': 1.2183687686920166, 'acc': 0.53125, 'step': 485},\n",
       "  {'loss': 1.164961576461792, 'acc': 0.75, 'step': 486},\n",
       "  {'loss': 1.1851385831832886, 'acc': 0.6875, 'step': 487},\n",
       "  {'loss': 1.3188620805740356, 'acc': 0.53125, 'step': 488},\n",
       "  {'loss': 1.2589713335037231, 'acc': 0.5625, 'step': 489},\n",
       "  {'loss': 1.25083327293396, 'acc': 0.5625, 'step': 490},\n",
       "  {'loss': 1.1566025018692017, 'acc': 0.625, 'step': 491},\n",
       "  {'loss': 1.2117695808410645, 'acc': 0.625, 'step': 492},\n",
       "  {'loss': 1.3891736268997192, 'acc': 0.5, 'step': 493},\n",
       "  {'loss': 1.1067560911178589, 'acc': 0.65625, 'step': 494},\n",
       "  {'loss': 1.2963577508926392, 'acc': 0.5625, 'step': 495},\n",
       "  {'loss': 1.349773645401001, 'acc': 0.46875, 'step': 496},\n",
       "  {'loss': 1.1202031373977661, 'acc': 0.71875, 'step': 497},\n",
       "  {'loss': 1.0700546503067017, 'acc': 0.65625, 'step': 498},\n",
       "  {'loss': 1.1081658601760864, 'acc': 0.65625, 'step': 499},\n",
       "  {'loss': 1.159751057624817, 'acc': 0.78125, 'step': 500},\n",
       "  {'loss': 1.1800880432128906, 'acc': 0.59375, 'step': 501},\n",
       "  {'loss': 1.1066713333129883, 'acc': 0.71875, 'step': 502},\n",
       "  {'loss': 1.0113818645477295, 'acc': 0.8125, 'step': 503},\n",
       "  {'loss': 1.1692571640014648, 'acc': 0.75, 'step': 504},\n",
       "  {'loss': 1.1866414546966553, 'acc': 0.625, 'step': 505},\n",
       "  {'loss': 1.2717088460922241, 'acc': 0.625, 'step': 506},\n",
       "  {'loss': 1.185073971748352, 'acc': 0.65625, 'step': 507},\n",
       "  {'loss': 1.219627022743225, 'acc': 0.59375, 'step': 508},\n",
       "  {'loss': 1.1063857078552246, 'acc': 0.65625, 'step': 509},\n",
       "  {'loss': 1.1541941165924072, 'acc': 0.53125, 'step': 510},\n",
       "  {'loss': 1.1927855014801025, 'acc': 0.65625, 'step': 511},\n",
       "  {'loss': 0.9144485592842102, 'acc': 0.78125, 'step': 512},\n",
       "  {'loss': 1.3479796648025513, 'acc': 0.46875, 'step': 513},\n",
       "  {'loss': 1.1223560571670532, 'acc': 0.5625, 'step': 514},\n",
       "  {'loss': 1.0432127714157104, 'acc': 0.71875, 'step': 515},\n",
       "  {'loss': 1.1872090101242065, 'acc': 0.5625, 'step': 516},\n",
       "  {'loss': 1.038094401359558, 'acc': 0.78125, 'step': 517},\n",
       "  {'loss': 1.2131991386413574, 'acc': 0.5, 'step': 518},\n",
       "  {'loss': 0.9940212965011597, 'acc': 0.6875, 'step': 519},\n",
       "  {'loss': 1.2786719799041748, 'acc': 0.375, 'step': 520},\n",
       "  {'loss': 0.9961379766464233, 'acc': 0.6875, 'step': 521},\n",
       "  {'loss': 1.2234135866165161, 'acc': 0.46875, 'step': 522},\n",
       "  {'loss': 1.0122562646865845, 'acc': 0.6875, 'step': 523},\n",
       "  {'loss': 1.0401431322097778, 'acc': 0.75, 'step': 524},\n",
       "  {'loss': 1.0700147151947021, 'acc': 0.75, 'step': 525},\n",
       "  {'loss': 0.9990653991699219, 'acc': 0.71875, 'step': 526},\n",
       "  {'loss': 0.931882381439209, 'acc': 0.8125, 'step': 527},\n",
       "  {'loss': 1.2187212705612183, 'acc': 0.625, 'step': 528},\n",
       "  {'loss': 1.085067629814148, 'acc': 0.625, 'step': 529},\n",
       "  {'loss': 1.115733027458191, 'acc': 0.65625, 'step': 530},\n",
       "  {'loss': 1.2238754034042358, 'acc': 0.59375, 'step': 531},\n",
       "  {'loss': 0.9930449724197388, 'acc': 0.71875, 'step': 532},\n",
       "  {'loss': 1.062811255455017, 'acc': 0.71875, 'step': 533},\n",
       "  {'loss': 1.1942538022994995, 'acc': 0.59375, 'step': 534},\n",
       "  {'loss': 1.0822407007217407, 'acc': 0.71875, 'step': 535},\n",
       "  {'loss': 1.2013846635818481, 'acc': 0.59375, 'step': 536},\n",
       "  {'loss': 1.091184377670288, 'acc': 0.5625, 'step': 537},\n",
       "  {'loss': 1.0220067501068115, 'acc': 0.71875, 'step': 538},\n",
       "  {'loss': 1.1857329607009888, 'acc': 0.5625, 'step': 539},\n",
       "  {'loss': 1.1113896369934082, 'acc': 0.71875, 'step': 540},\n",
       "  {'loss': 1.1542201042175293, 'acc': 0.6875, 'step': 541},\n",
       "  {'loss': 1.2336456775665283, 'acc': 0.53125, 'step': 542},\n",
       "  {'loss': 1.2086588144302368, 'acc': 0.53125, 'step': 543},\n",
       "  {'loss': 1.0394740104675293, 'acc': 0.625, 'step': 544},\n",
       "  {'loss': 1.1157500743865967, 'acc': 0.65625, 'step': 545},\n",
       "  {'loss': 1.1189125776290894, 'acc': 0.65625, 'step': 546},\n",
       "  {'loss': 1.1740379333496094, 'acc': 0.625, 'step': 547},\n",
       "  {'loss': 1.230563759803772, 'acc': 0.53125, 'step': 548},\n",
       "  {'loss': 1.0894047021865845, 'acc': 0.75, 'step': 549},\n",
       "  {'loss': 1.2083836793899536, 'acc': 0.59375, 'step': 550},\n",
       "  {'loss': 1.1572307348251343, 'acc': 0.59375, 'step': 551},\n",
       "  {'loss': 1.1673483848571777, 'acc': 0.71875, 'step': 552},\n",
       "  {'loss': 1.0340126752853394, 'acc': 0.71875, 'step': 553},\n",
       "  {'loss': 1.0017216205596924, 'acc': 0.65625, 'step': 554},\n",
       "  {'loss': 1.1716896295547485, 'acc': 0.5625, 'step': 555},\n",
       "  {'loss': 1.1571401357650757, 'acc': 0.53125, 'step': 556},\n",
       "  {'loss': 1.279873013496399, 'acc': 0.53125, 'step': 557},\n",
       "  {'loss': 1.1554259061813354, 'acc': 0.6875, 'step': 558},\n",
       "  {'loss': 1.1068631410598755, 'acc': 0.59375, 'step': 559},\n",
       "  {'loss': 0.9916305541992188, 'acc': 0.625, 'step': 560},\n",
       "  {'loss': 0.9415650367736816, 'acc': 0.75, 'step': 561},\n",
       "  {'loss': 1.1909807920455933, 'acc': 0.59375, 'step': 562},\n",
       "  {'loss': 1.040345549583435, 'acc': 0.6875, 'step': 563},\n",
       "  {'loss': 1.2350915670394897, 'acc': 0.625, 'step': 564},\n",
       "  {'loss': 1.268930196762085, 'acc': 0.5625, 'step': 565},\n",
       "  {'loss': 1.0225653648376465, 'acc': 0.65625, 'step': 566},\n",
       "  {'loss': 1.1162856817245483, 'acc': 0.59375, 'step': 567},\n",
       "  {'loss': 0.8786948323249817, 'acc': 0.8125, 'step': 568},\n",
       "  {'loss': 1.0733586549758911, 'acc': 0.625, 'step': 569},\n",
       "  {'loss': 0.9961733818054199, 'acc': 0.75, 'step': 570},\n",
       "  {'loss': 1.3651889562606812, 'acc': 0.46875, 'step': 571},\n",
       "  {'loss': 0.9932557940483093, 'acc': 0.625, 'step': 572},\n",
       "  {'loss': 1.043485403060913, 'acc': 0.6875, 'step': 573},\n",
       "  {'loss': 1.1280391216278076, 'acc': 0.625, 'step': 574},\n",
       "  {'loss': 0.9875923991203308, 'acc': 0.6875, 'step': 575},\n",
       "  {'loss': 1.101293921470642, 'acc': 0.65625, 'step': 576},\n",
       "  {'loss': 1.1643035411834717, 'acc': 0.6875, 'step': 577},\n",
       "  {'loss': 0.9953756332397461, 'acc': 0.625, 'step': 578},\n",
       "  {'loss': 1.4467206001281738, 'acc': 0.5, 'step': 579},\n",
       "  {'loss': 1.060692548751831, 'acc': 0.65625, 'step': 580},\n",
       "  {'loss': 1.1532293558120728, 'acc': 0.59375, 'step': 581},\n",
       "  {'loss': 1.1363072395324707, 'acc': 0.6875, 'step': 582},\n",
       "  {'loss': 1.0142501592636108, 'acc': 0.6875, 'step': 583},\n",
       "  {'loss': 0.9904520511627197, 'acc': 0.6875, 'step': 584},\n",
       "  {'loss': 1.1668468713760376, 'acc': 0.65625, 'step': 585},\n",
       "  {'loss': 1.0167385339736938, 'acc': 0.6875, 'step': 586},\n",
       "  {'loss': 1.154591679573059, 'acc': 0.59375, 'step': 587},\n",
       "  {'loss': 1.2674708366394043, 'acc': 0.53125, 'step': 588},\n",
       "  {'loss': 1.2699966430664062, 'acc': 0.65625, 'step': 589},\n",
       "  {'loss': 1.1004583835601807, 'acc': 0.59375, 'step': 590},\n",
       "  {'loss': 1.1427078247070312, 'acc': 0.5625, 'step': 591},\n",
       "  {'loss': 1.0300337076187134, 'acc': 0.65625, 'step': 592},\n",
       "  {'loss': 1.014499306678772, 'acc': 0.71875, 'step': 593},\n",
       "  {'loss': 1.1145823001861572, 'acc': 0.6875, 'step': 594},\n",
       "  {'loss': 1.0108431577682495, 'acc': 0.625, 'step': 595},\n",
       "  {'loss': 1.0814052820205688, 'acc': 0.625, 'step': 596},\n",
       "  {'loss': 1.1428322792053223, 'acc': 0.65625, 'step': 597},\n",
       "  {'loss': 1.1569268703460693, 'acc': 0.59375, 'step': 598},\n",
       "  {'loss': 1.0875259637832642, 'acc': 0.65625, 'step': 599},\n",
       "  {'loss': 1.0757412910461426, 'acc': 0.59375, 'step': 600},\n",
       "  {'loss': 0.9973784685134888, 'acc': 0.59375, 'step': 601},\n",
       "  {'loss': 1.1469202041625977, 'acc': 0.625, 'step': 602},\n",
       "  {'loss': 0.9885642528533936, 'acc': 0.75, 'step': 603},\n",
       "  {'loss': 0.8794235587120056, 'acc': 0.75, 'step': 604},\n",
       "  {'loss': 1.001634120941162, 'acc': 0.65625, 'step': 605},\n",
       "  {'loss': 0.8509576320648193, 'acc': 0.78125, 'step': 606},\n",
       "  {'loss': 1.0865250825881958, 'acc': 0.65625, 'step': 607},\n",
       "  {'loss': 1.0679489374160767, 'acc': 0.59375, 'step': 608},\n",
       "  {'loss': 1.0697194337844849, 'acc': 0.625, 'step': 609},\n",
       "  {'loss': 1.2822890281677246, 'acc': 0.53125, 'step': 610},\n",
       "  {'loss': 1.0388375520706177, 'acc': 0.625, 'step': 611},\n",
       "  {'loss': 0.9842965006828308, 'acc': 0.65625, 'step': 612},\n",
       "  {'loss': 1.0399888753890991, 'acc': 0.65625, 'step': 613},\n",
       "  {'loss': 1.0301291942596436, 'acc': 0.59375, 'step': 614},\n",
       "  {'loss': 0.9553216099739075, 'acc': 0.78125, 'step': 615},\n",
       "  {'loss': 0.8475385904312134, 'acc': 0.75, 'step': 616},\n",
       "  {'loss': 0.9369494318962097, 'acc': 0.71875, 'step': 617},\n",
       "  {'loss': 1.1570069789886475, 'acc': 0.59375, 'step': 618},\n",
       "  {'loss': 1.095693826675415, 'acc': 0.8125, 'step': 619},\n",
       "  {'loss': 0.968186616897583, 'acc': 0.75, 'step': 620},\n",
       "  {'loss': 0.9673174023628235, 'acc': 0.5625, 'step': 621},\n",
       "  {'loss': 0.906791090965271, 'acc': 0.625, 'step': 622},\n",
       "  {'loss': 0.9456229209899902, 'acc': 0.5625, 'step': 623},\n",
       "  {'loss': 0.9188077449798584, 'acc': 0.65625, 'step': 624},\n",
       "  {'loss': 0.8887618780136108, 'acc': 0.65625, 'step': 625},\n",
       "  {'loss': 0.882789671421051, 'acc': 0.6875, 'step': 626},\n",
       "  {'loss': 1.2960553169250488, 'acc': 0.59375, 'step': 627},\n",
       "  {'loss': 0.9752746820449829, 'acc': 0.75, 'step': 628},\n",
       "  {'loss': 1.1365896463394165, 'acc': 0.59375, 'step': 629},\n",
       "  {'loss': 0.9405182003974915, 'acc': 0.65625, 'step': 630},\n",
       "  {'loss': 1.024583101272583, 'acc': 0.59375, 'step': 631},\n",
       "  {'loss': 0.9421579837799072, 'acc': 0.71875, 'step': 632},\n",
       "  {'loss': 0.9372511506080627, 'acc': 0.625, 'step': 633},\n",
       "  {'loss': 0.9342164993286133, 'acc': 0.71875, 'step': 634},\n",
       "  {'loss': 0.8931400775909424, 'acc': 0.78125, 'step': 635},\n",
       "  {'loss': 1.112287163734436, 'acc': 0.5, 'step': 636},\n",
       "  {'loss': 1.0635614395141602, 'acc': 0.5, 'step': 637},\n",
       "  {'loss': 0.9174181818962097, 'acc': 0.65625, 'step': 638},\n",
       "  {'loss': 0.9811533689498901, 'acc': 0.625, 'step': 639},\n",
       "  {'loss': 1.0136151313781738, 'acc': 0.53125, 'step': 640},\n",
       "  {'loss': 1.0148720741271973, 'acc': 0.5625, 'step': 641},\n",
       "  {'loss': 0.8845569491386414, 'acc': 0.71875, 'step': 642},\n",
       "  {'loss': 0.978636622428894, 'acc': 0.625, 'step': 643},\n",
       "  {'loss': 1.0916827917099, 'acc': 0.6875, 'step': 644},\n",
       "  {'loss': 1.3491638898849487, 'acc': 0.5625, 'step': 645},\n",
       "  {'loss': 0.9188905954360962, 'acc': 0.6875, 'step': 646},\n",
       "  {'loss': 0.9729423522949219, 'acc': 0.65625, 'step': 647},\n",
       "  {'loss': 0.9321154952049255, 'acc': 0.6875, 'step': 648},\n",
       "  {'loss': 0.9610591530799866, 'acc': 0.75, 'step': 649},\n",
       "  {'loss': 1.0216004848480225, 'acc': 0.65625, 'step': 650},\n",
       "  {'loss': 1.081032633781433, 'acc': 0.625, 'step': 651},\n",
       "  {'loss': 1.081257939338684, 'acc': 0.5625, 'step': 652},\n",
       "  {'loss': 0.8748913407325745, 'acc': 0.78125, 'step': 653},\n",
       "  {'loss': 1.0368441343307495, 'acc': 0.53125, 'step': 654},\n",
       "  {'loss': 1.0043144226074219, 'acc': 0.5625, 'step': 655},\n",
       "  {'loss': 0.9923137426376343, 'acc': 0.65625, 'step': 656},\n",
       "  {'loss': 0.8531243801116943, 'acc': 0.75, 'step': 657},\n",
       "  {'loss': 1.053191900253296, 'acc': 0.5625, 'step': 658},\n",
       "  {'loss': 1.050950288772583, 'acc': 0.53125, 'step': 659},\n",
       "  {'loss': 0.9201887249946594, 'acc': 0.71875, 'step': 660},\n",
       "  {'loss': 0.8080954551696777, 'acc': 0.84375, 'step': 661},\n",
       "  {'loss': 0.8227206468582153, 'acc': 0.71875, 'step': 662},\n",
       "  {'loss': 1.0762484073638916, 'acc': 0.53125, 'step': 663},\n",
       "  {'loss': 1.2179254293441772, 'acc': 0.59375, 'step': 664},\n",
       "  {'loss': 0.941215455532074, 'acc': 0.71875, 'step': 665},\n",
       "  {'loss': 1.2388579845428467, 'acc': 0.5625, 'step': 666},\n",
       "  {'loss': 0.9998254776000977, 'acc': 0.65625, 'step': 667},\n",
       "  {'loss': 0.9948700666427612, 'acc': 0.65625, 'step': 668},\n",
       "  {'loss': 0.906819224357605, 'acc': 0.75, 'step': 669},\n",
       "  {'loss': 0.9746225476264954, 'acc': 0.5625, 'step': 670},\n",
       "  {'loss': 0.9602502584457397, 'acc': 0.5625, 'step': 671},\n",
       "  {'loss': 0.9627671241760254, 'acc': 0.6875, 'step': 672},\n",
       "  {'loss': 0.913513720035553, 'acc': 0.65625, 'step': 673},\n",
       "  {'loss': 0.6837064623832703, 'acc': 0.8125, 'step': 674},\n",
       "  {'loss': 1.3204357624053955, 'acc': 0.46875, 'step': 675},\n",
       "  {'loss': 0.9744314551353455, 'acc': 0.6875, 'step': 676},\n",
       "  {'loss': 1.1315155029296875, 'acc': 0.53125, 'step': 677},\n",
       "  {'loss': 0.8118240833282471, 'acc': 0.75, 'step': 678},\n",
       "  {'loss': 1.0372564792633057, 'acc': 0.625, 'step': 679},\n",
       "  {'loss': 0.924345076084137, 'acc': 0.6875, 'step': 680},\n",
       "  {'loss': 1.0802651643753052, 'acc': 0.59375, 'step': 681},\n",
       "  {'loss': 0.9868274331092834, 'acc': 0.71875, 'step': 682},\n",
       "  {'loss': 1.0366960763931274, 'acc': 0.625, 'step': 683},\n",
       "  {'loss': 0.9021040201187134, 'acc': 0.65625, 'step': 684},\n",
       "  {'loss': 1.0606107711791992, 'acc': 0.6875, 'step': 685},\n",
       "  {'loss': 1.0053982734680176, 'acc': 0.5625, 'step': 686},\n",
       "  {'loss': 0.792611837387085, 'acc': 0.75, 'step': 687},\n",
       "  {'loss': 0.7186612486839294, 'acc': 0.90625, 'step': 688},\n",
       "  {'loss': 1.0124821662902832, 'acc': 0.59375, 'step': 689},\n",
       "  {'loss': 0.8705979585647583, 'acc': 0.6875, 'step': 690},\n",
       "  {'loss': 0.8313493132591248, 'acc': 0.6875, 'step': 691},\n",
       "  {'loss': 0.8704566955566406, 'acc': 0.71875, 'step': 692},\n",
       "  {'loss': 0.9645470976829529, 'acc': 0.625, 'step': 693},\n",
       "  {'loss': 0.9246340990066528, 'acc': 0.71875, 'step': 694},\n",
       "  {'loss': 0.682094395160675, 'acc': 0.8125, 'step': 695},\n",
       "  {'loss': 0.9998307228088379, 'acc': 0.5625, 'step': 696},\n",
       "  {'loss': 0.9461822509765625, 'acc': 0.625, 'step': 697},\n",
       "  {'loss': 0.8344849944114685, 'acc': 0.8125, 'step': 698},\n",
       "  {'loss': 0.9986187815666199, 'acc': 0.59375, 'step': 699},\n",
       "  {'loss': 0.8395740985870361, 'acc': 0.6875, 'step': 700},\n",
       "  {'loss': 0.8155394792556763, 'acc': 0.71875, 'step': 701},\n",
       "  {'loss': 1.2370235919952393, 'acc': 0.5625, 'step': 702},\n",
       "  {'loss': 0.8663270473480225, 'acc': 0.6875, 'step': 703},\n",
       "  {'loss': 1.039728045463562, 'acc': 0.59375, 'step': 704},\n",
       "  {'loss': 1.0741565227508545, 'acc': 0.59375, 'step': 705},\n",
       "  {'loss': 0.8298150300979614, 'acc': 0.6875, 'step': 706},\n",
       "  {'loss': 0.7553554773330688, 'acc': 0.71875, 'step': 707},\n",
       "  {'loss': 0.9693227410316467, 'acc': 0.53125, 'step': 708},\n",
       "  {'loss': 1.052935242652893, 'acc': 0.5625, 'step': 709},\n",
       "  {'loss': 0.9213204383850098, 'acc': 0.5625, 'step': 710},\n",
       "  {'loss': 0.9546014666557312, 'acc': 0.5625, 'step': 711},\n",
       "  {'loss': 0.7678104043006897, 'acc': 0.75, 'step': 712},\n",
       "  {'loss': 0.9028645157814026, 'acc': 0.71875, 'step': 713},\n",
       "  {'loss': 0.7414512634277344, 'acc': 0.71875, 'step': 714},\n",
       "  {'loss': 1.0024653673171997, 'acc': 0.53125, 'step': 715},\n",
       "  {'loss': 1.0422524213790894, 'acc': 0.53125, 'step': 716},\n",
       "  {'loss': 0.8939836621284485, 'acc': 0.625, 'step': 717},\n",
       "  {'loss': 0.9878441691398621, 'acc': 0.65625, 'step': 718},\n",
       "  {'loss': 0.8980357646942139, 'acc': 0.6875, 'step': 719},\n",
       "  {'loss': 0.9847325682640076, 'acc': 0.5625, 'step': 720},\n",
       "  {'loss': 1.044132947921753, 'acc': 0.53125, 'step': 721},\n",
       "  {'loss': 0.9420086741447449, 'acc': 0.59375, 'step': 722},\n",
       "  {'loss': 1.0000648498535156, 'acc': 0.65625, 'step': 723},\n",
       "  {'loss': 0.9445850849151611, 'acc': 0.625, 'step': 724},\n",
       "  {'loss': 0.9846814870834351, 'acc': 0.5625, 'step': 725},\n",
       "  {'loss': 0.9999495148658752, 'acc': 0.625, 'step': 726},\n",
       "  {'loss': 1.0060688257217407, 'acc': 0.5625, 'step': 727},\n",
       "  {'loss': 0.7536043524742126, 'acc': 0.71875, 'step': 728},\n",
       "  {'loss': 0.8948312997817993, 'acc': 0.65625, 'step': 729},\n",
       "  {'loss': 0.8700464367866516, 'acc': 0.625, 'step': 730},\n",
       "  {'loss': 1.0027185678482056, 'acc': 0.65625, 'step': 731},\n",
       "  {'loss': 0.8303810954093933, 'acc': 0.8125, 'step': 732},\n",
       "  {'loss': 1.0692530870437622, 'acc': 0.5625, 'step': 733},\n",
       "  {'loss': 0.7730058431625366, 'acc': 0.8125, 'step': 734},\n",
       "  {'loss': 1.1273144483566284, 'acc': 0.53125, 'step': 735},\n",
       "  {'loss': 0.623650312423706, 'acc': 0.90625, 'step': 736},\n",
       "  {'loss': 0.8907263278961182, 'acc': 0.75, 'step': 737},\n",
       "  {'loss': 0.912630021572113, 'acc': 0.6875, 'step': 738},\n",
       "  {'loss': 0.7991654872894287, 'acc': 0.6875, 'step': 739},\n",
       "  {'loss': 1.097179889678955, 'acc': 0.53125, 'step': 740},\n",
       "  {'loss': 0.9549241065979004, 'acc': 0.65625, 'step': 741},\n",
       "  {'loss': 0.8614259958267212, 'acc': 0.625, 'step': 742},\n",
       "  {'loss': 0.7971716523170471, 'acc': 0.71875, 'step': 743},\n",
       "  {'loss': 0.9766347408294678, 'acc': 0.5625, 'step': 744},\n",
       "  {'loss': 0.8244885802268982, 'acc': 0.625, 'step': 745},\n",
       "  {'loss': 0.795761227607727, 'acc': 0.75, 'step': 746},\n",
       "  {'loss': 0.8366696834564209, 'acc': 0.71875, 'step': 747},\n",
       "  {'loss': 0.7039220333099365, 'acc': 0.75, 'step': 748},\n",
       "  {'loss': 1.02430260181427, 'acc': 0.65625, 'step': 749},\n",
       "  {'loss': 0.9572704434394836, 'acc': 0.65625, 'step': 750},\n",
       "  {'loss': 0.779346227645874, 'acc': 0.6875, 'step': 751},\n",
       "  {'loss': 0.9440877437591553, 'acc': 0.65625, 'step': 752},\n",
       "  {'loss': 0.8734556436538696, 'acc': 0.625, 'step': 753},\n",
       "  {'loss': 1.033737063407898, 'acc': 0.65625, 'step': 754},\n",
       "  {'loss': 0.7393325567245483, 'acc': 0.75, 'step': 755},\n",
       "  {'loss': 0.8932291865348816, 'acc': 0.5625, 'step': 756},\n",
       "  {'loss': 0.83561772108078, 'acc': 0.59375, 'step': 757},\n",
       "  {'loss': 0.9222725629806519, 'acc': 0.625, 'step': 758},\n",
       "  {'loss': 0.695409893989563, 'acc': 0.75, 'step': 759},\n",
       "  {'loss': 0.8182788491249084, 'acc': 0.625, 'step': 760},\n",
       "  {'loss': 0.9975415468215942, 'acc': 0.59375, 'step': 761},\n",
       "  {'loss': 0.8106793165206909, 'acc': 0.65625, 'step': 762},\n",
       "  {'loss': 0.9933317303657532, 'acc': 0.65625, 'step': 763},\n",
       "  {'loss': 0.7775064706802368, 'acc': 0.6875, 'step': 764},\n",
       "  {'loss': 0.9064396619796753, 'acc': 0.65625, 'step': 765},\n",
       "  {'loss': 0.9128957986831665, 'acc': 0.59375, 'step': 766},\n",
       "  {'loss': 0.923126757144928, 'acc': 0.5625, 'step': 767},\n",
       "  {'loss': 0.8603126406669617, 'acc': 0.6875, 'step': 768},\n",
       "  {'loss': 1.0194096565246582, 'acc': 0.78125, 'step': 769},\n",
       "  {'loss': 0.6966876983642578, 'acc': 0.8125, 'step': 770},\n",
       "  {'loss': 0.8542317748069763, 'acc': 0.75, 'step': 771},\n",
       "  {'loss': 1.1064879894256592, 'acc': 0.5625, 'step': 772},\n",
       "  {'loss': 0.8601407408714294, 'acc': 0.65625, 'step': 773},\n",
       "  {'loss': 0.8664452433586121, 'acc': 0.59375, 'step': 774},\n",
       "  {'loss': 1.0922998189926147, 'acc': 0.625, 'step': 775},\n",
       "  {'loss': 1.0653350353240967, 'acc': 0.5, 'step': 776},\n",
       "  {'loss': 0.7893469929695129, 'acc': 0.71875, 'step': 777},\n",
       "  {'loss': 0.7206204533576965, 'acc': 0.75, 'step': 778},\n",
       "  {'loss': 1.0375940799713135, 'acc': 0.65625, 'step': 779},\n",
       "  {'loss': 0.8036121726036072, 'acc': 0.71875, 'step': 780},\n",
       "  {'loss': 0.9768677949905396, 'acc': 0.65625, 'step': 781},\n",
       "  {'loss': 0.7849052548408508, 'acc': 0.6875, 'step': 782},\n",
       "  {'loss': 1.1940618753433228, 'acc': 0.5, 'step': 783},\n",
       "  {'loss': 0.8143442869186401, 'acc': 0.8125, 'step': 784},\n",
       "  {'loss': 0.9990507364273071, 'acc': 0.65625, 'step': 785},\n",
       "  {'loss': 0.9909135103225708, 'acc': 0.59375, 'step': 786},\n",
       "  {'loss': 0.8823333382606506, 'acc': 0.625, 'step': 787},\n",
       "  {'loss': 1.0110342502593994, 'acc': 0.625, 'step': 788},\n",
       "  {'loss': 0.9822820425033569, 'acc': 0.6875, 'step': 789},\n",
       "  {'loss': 0.8018665909767151, 'acc': 0.75, 'step': 790},\n",
       "  {'loss': 0.8755507469177246, 'acc': 0.65625, 'step': 791},\n",
       "  {'loss': 1.0303548574447632, 'acc': 0.6875, 'step': 792},\n",
       "  {'loss': 0.9070934057235718, 'acc': 0.71875, 'step': 793},\n",
       "  {'loss': 0.7946785688400269, 'acc': 0.6875, 'step': 794},\n",
       "  {'loss': 0.8907767534255981, 'acc': 0.59375, 'step': 795},\n",
       "  {'loss': 0.8244003653526306, 'acc': 0.75, 'step': 796},\n",
       "  {'loss': 0.7354038953781128, 'acc': 0.71875, 'step': 797},\n",
       "  {'loss': 1.0787385702133179, 'acc': 0.5, 'step': 798},\n",
       "  {'loss': 0.7755523920059204, 'acc': 0.6875, 'step': 799},\n",
       "  {'loss': 1.0125072002410889, 'acc': 0.6875, 'step': 800},\n",
       "  {'loss': 0.7321857213973999, 'acc': 0.75, 'step': 801},\n",
       "  {'loss': 0.7493311762809753, 'acc': 0.8125, 'step': 802},\n",
       "  {'loss': 0.8662463426589966, 'acc': 0.71875, 'step': 803},\n",
       "  {'loss': 0.853500485420227, 'acc': 0.65625, 'step': 804},\n",
       "  {'loss': 0.9326592683792114, 'acc': 0.59375, 'step': 805},\n",
       "  {'loss': 1.0013238191604614, 'acc': 0.5, 'step': 806},\n",
       "  {'loss': 1.080868124961853, 'acc': 0.59375, 'step': 807},\n",
       "  {'loss': 0.9446919560432434, 'acc': 0.6875, 'step': 808},\n",
       "  {'loss': 0.7995074987411499, 'acc': 0.78125, 'step': 809},\n",
       "  {'loss': 1.255497932434082, 'acc': 0.4375, 'step': 810},\n",
       "  {'loss': 1.045831322669983, 'acc': 0.65625, 'step': 811},\n",
       "  {'loss': 0.9579395651817322, 'acc': 0.59375, 'step': 812},\n",
       "  {'loss': 0.9655557870864868, 'acc': 0.625, 'step': 813},\n",
       "  {'loss': 1.131056308746338, 'acc': 0.5, 'step': 814},\n",
       "  {'loss': 0.875190019607544, 'acc': 0.53125, 'step': 815},\n",
       "  {'loss': 0.9835243821144104, 'acc': 0.59375, 'step': 816},\n",
       "  {'loss': 0.7568522095680237, 'acc': 0.71875, 'step': 817},\n",
       "  {'loss': 0.8591710329055786, 'acc': 0.65625, 'step': 818},\n",
       "  {'loss': 0.9328460097312927, 'acc': 0.6875, 'step': 819},\n",
       "  {'loss': 0.7980936169624329, 'acc': 0.71875, 'step': 820},\n",
       "  {'loss': 0.9061815738677979, 'acc': 0.6875, 'step': 821},\n",
       "  {'loss': 0.9307676553726196, 'acc': 0.71875, 'step': 822},\n",
       "  {'loss': 0.9264906048774719, 'acc': 0.65625, 'step': 823},\n",
       "  {'loss': 0.8023136854171753, 'acc': 0.78125, 'step': 824},\n",
       "  {'loss': 0.9074870944023132, 'acc': 0.65625, 'step': 825},\n",
       "  {'loss': 0.8460080027580261, 'acc': 0.65625, 'step': 826},\n",
       "  {'loss': 0.9255285859107971, 'acc': 0.65625, 'step': 827},\n",
       "  {'loss': 0.7577273845672607, 'acc': 0.65625, 'step': 828},\n",
       "  {'loss': 0.8057016730308533, 'acc': 0.8125, 'step': 829},\n",
       "  {'loss': 0.9908533096313477, 'acc': 0.5625, 'step': 830},\n",
       "  {'loss': 0.7594532370567322, 'acc': 0.65625, 'step': 831},\n",
       "  {'loss': 0.8917664885520935, 'acc': 0.59375, 'step': 832},\n",
       "  {'loss': 0.8708381056785583, 'acc': 0.65625, 'step': 833},\n",
       "  {'loss': 0.5839061141014099, 'acc': 0.875, 'step': 834},\n",
       "  {'loss': 0.7768723368644714, 'acc': 0.65625, 'step': 835},\n",
       "  {'loss': 0.8134302496910095, 'acc': 0.65625, 'step': 836},\n",
       "  {'loss': 0.6511884331703186, 'acc': 0.84375, 'step': 837},\n",
       "  {'loss': 0.9320070743560791, 'acc': 0.625, 'step': 838},\n",
       "  {'loss': 0.866064190864563, 'acc': 0.6875, 'step': 839},\n",
       "  {'loss': 0.769129753112793, 'acc': 0.6875, 'step': 840},\n",
       "  {'loss': 0.7255792617797852, 'acc': 0.75, 'step': 841},\n",
       "  {'loss': 0.8641588687896729, 'acc': 0.6875, 'step': 842},\n",
       "  {'loss': 0.7686448097229004, 'acc': 0.6875, 'step': 843},\n",
       "  {'loss': 0.8089005351066589, 'acc': 0.71875, 'step': 844},\n",
       "  {'loss': 0.7455689907073975, 'acc': 0.71875, 'step': 845},\n",
       "  {'loss': 0.7943946719169617, 'acc': 0.65625, 'step': 846},\n",
       "  {'loss': 0.7881319522857666, 'acc': 0.65625, 'step': 847},\n",
       "  {'loss': 1.0873806476593018, 'acc': 0.65625, 'step': 848},\n",
       "  {'loss': 0.8915376663208008, 'acc': 0.625, 'step': 849},\n",
       "  {'loss': 0.8877624273300171, 'acc': 0.71875, 'step': 850},\n",
       "  {'loss': 0.7684217691421509, 'acc': 0.78125, 'step': 851},\n",
       "  {'loss': 0.9047062397003174, 'acc': 0.71875, 'step': 852},\n",
       "  {'loss': 0.8387424945831299, 'acc': 0.65625, 'step': 853},\n",
       "  {'loss': 0.9042606353759766, 'acc': 0.625, 'step': 854},\n",
       "  {'loss': 1.0238978862762451, 'acc': 0.5625, 'step': 855},\n",
       "  {'loss': 0.8515246510505676, 'acc': 0.71875, 'step': 856},\n",
       "  {'loss': 0.9018230438232422, 'acc': 0.71875, 'step': 857},\n",
       "  {'loss': 0.9996709227561951, 'acc': 0.625, 'step': 858},\n",
       "  {'loss': 0.8549973368644714, 'acc': 0.75, 'step': 859},\n",
       "  {'loss': 0.6888208985328674, 'acc': 0.6875, 'step': 860},\n",
       "  {'loss': 0.9843781590461731, 'acc': 0.6875, 'step': 861},\n",
       "  {'loss': 0.9805821776390076, 'acc': 0.65625, 'step': 862},\n",
       "  {'loss': 0.9716728329658508, 'acc': 0.53125, 'step': 863},\n",
       "  {'loss': 0.8210827708244324, 'acc': 0.75, 'step': 864},\n",
       "  {'loss': 0.776756763458252, 'acc': 0.6875, 'step': 865},\n",
       "  {'loss': 0.8472046852111816, 'acc': 0.75, 'step': 866},\n",
       "  {'loss': 1.0092241764068604, 'acc': 0.5, 'step': 867},\n",
       "  {'loss': 1.089144229888916, 'acc': 0.625, 'step': 868},\n",
       "  {'loss': 0.9375265836715698, 'acc': 0.65625, 'step': 869},\n",
       "  {'loss': 0.7811964750289917, 'acc': 0.6875, 'step': 870},\n",
       "  {'loss': 0.6865816116333008, 'acc': 0.71875, 'step': 871},\n",
       "  {'loss': 0.8837277889251709, 'acc': 0.625, 'step': 872},\n",
       "  {'loss': 0.866959810256958, 'acc': 0.65625, 'step': 873},\n",
       "  {'loss': 0.8946849703788757, 'acc': 0.59375, 'step': 874},\n",
       "  {'loss': 0.7388709187507629, 'acc': 0.78125, 'step': 875},\n",
       "  {'loss': 0.9580009579658508, 'acc': 0.65625, 'step': 876},\n",
       "  {'loss': 0.7175549864768982, 'acc': 0.6875, 'step': 877},\n",
       "  {'loss': 1.0941483974456787, 'acc': 0.5, 'step': 878},\n",
       "  {'loss': 0.8933104276657104, 'acc': 0.5625, 'step': 879},\n",
       "  {'loss': 0.7188791632652283, 'acc': 0.65625, 'step': 880},\n",
       "  {'loss': 0.7980471253395081, 'acc': 0.71875, 'step': 881},\n",
       "  {'loss': 0.937807023525238, 'acc': 0.59375, 'step': 882},\n",
       "  {'loss': 0.9749665856361389, 'acc': 0.65625, 'step': 883},\n",
       "  {'loss': 0.9082504510879517, 'acc': 0.65625, 'step': 884},\n",
       "  {'loss': 1.301110029220581, 'acc': 0.5, 'step': 885},\n",
       "  {'loss': 0.6957807540893555, 'acc': 0.78125, 'step': 886},\n",
       "  {'loss': 0.8773895502090454, 'acc': 0.625, 'step': 887},\n",
       "  {'loss': 0.8935139179229736, 'acc': 0.59375, 'step': 888},\n",
       "  {'loss': 0.6703740358352661, 'acc': 0.75, 'step': 889},\n",
       "  {'loss': 0.7479025721549988, 'acc': 0.65625, 'step': 890},\n",
       "  {'loss': 0.8721492290496826, 'acc': 0.65625, 'step': 891},\n",
       "  {'loss': 0.7108769416809082, 'acc': 0.78125, 'step': 892},\n",
       "  {'loss': 0.9057008028030396, 'acc': 0.75, 'step': 893},\n",
       "  {'loss': 0.9179152846336365, 'acc': 0.59375, 'step': 894},\n",
       "  {'loss': 1.02603280544281, 'acc': 0.59375, 'step': 895},\n",
       "  {'loss': 0.7656248807907104, 'acc': 0.75, 'step': 896},\n",
       "  {'loss': 0.8878477215766907, 'acc': 0.625, 'step': 897},\n",
       "  {'loss': 0.7799319624900818, 'acc': 0.75, 'step': 898},\n",
       "  {'loss': 1.0776787996292114, 'acc': 0.5625, 'step': 899},\n",
       "  {'loss': 0.7526842951774597, 'acc': 0.71875, 'step': 900},\n",
       "  {'loss': 0.9459658861160278, 'acc': 0.65625, 'step': 901},\n",
       "  {'loss': 0.7083046436309814, 'acc': 0.71875, 'step': 902},\n",
       "  {'loss': 0.8172957897186279, 'acc': 0.6875, 'step': 903},\n",
       "  {'loss': 0.8755204677581787, 'acc': 0.625, 'step': 904},\n",
       "  {'loss': 0.676639974117279, 'acc': 0.75, 'step': 905},\n",
       "  {'loss': 0.7953752875328064, 'acc': 0.75, 'step': 906},\n",
       "  {'loss': 1.015695571899414, 'acc': 0.625, 'step': 907},\n",
       "  {'loss': 0.4904209077358246, 'acc': 0.875, 'step': 908},\n",
       "  {'loss': 0.5213856101036072, 'acc': 0.875, 'step': 909},\n",
       "  {'loss': 0.9907467365264893, 'acc': 0.59375, 'step': 910},\n",
       "  {'loss': 0.8413639068603516, 'acc': 0.65625, 'step': 911},\n",
       "  {'loss': 0.6660008430480957, 'acc': 0.71875, 'step': 912},\n",
       "  {'loss': 0.8386638164520264, 'acc': 0.625, 'step': 913},\n",
       "  {'loss': 0.7962522506713867, 'acc': 0.59375, 'step': 914},\n",
       "  {'loss': 0.6682125329971313, 'acc': 0.75, 'step': 915},\n",
       "  {'loss': 1.0035265684127808, 'acc': 0.65625, 'step': 916},\n",
       "  {'loss': 0.8479486703872681, 'acc': 0.71875, 'step': 917},\n",
       "  {'loss': 1.1542580127716064, 'acc': 0.5, 'step': 918},\n",
       "  {'loss': 0.6533699631690979, 'acc': 0.8125, 'step': 919},\n",
       "  {'loss': 0.7735000848770142, 'acc': 0.6875, 'step': 920},\n",
       "  {'loss': 0.988966703414917, 'acc': 0.625, 'step': 921},\n",
       "  {'loss': 0.7140383124351501, 'acc': 0.78125, 'step': 922},\n",
       "  {'loss': 0.8407467007637024, 'acc': 0.65625, 'step': 923},\n",
       "  {'loss': 0.6936737298965454, 'acc': 0.59375, 'step': 924},\n",
       "  {'loss': 0.6940381526947021, 'acc': 0.71875, 'step': 925},\n",
       "  {'loss': 0.8007331490516663, 'acc': 0.65625, 'step': 926},\n",
       "  {'loss': 0.9247198104858398, 'acc': 0.5625, 'step': 927},\n",
       "  {'loss': 0.6711440086364746, 'acc': 0.71875, 'step': 928},\n",
       "  {'loss': 0.6478134989738464, 'acc': 0.78125, 'step': 929},\n",
       "  {'loss': 1.0221548080444336, 'acc': 0.59375, 'step': 930},\n",
       "  {'loss': 0.6647340655326843, 'acc': 0.75, 'step': 931},\n",
       "  {'loss': 0.6872121095657349, 'acc': 0.78125, 'step': 932},\n",
       "  {'loss': 0.8592119812965393, 'acc': 0.6875, 'step': 933},\n",
       "  {'loss': 0.6812655329704285, 'acc': 0.8125, 'step': 934},\n",
       "  {'loss': 0.6681038737297058, 'acc': 0.8125, 'step': 935},\n",
       "  {'loss': 0.7009831666946411, 'acc': 0.8125, 'step': 936},\n",
       "  {'loss': 1.0515270233154297, 'acc': 0.625, 'step': 937},\n",
       "  {'loss': 1.0038632154464722, 'acc': 0.59375, 'step': 938},\n",
       "  {'loss': 0.724098265171051, 'acc': 0.75, 'step': 939},\n",
       "  {'loss': 0.887617826461792, 'acc': 0.65625, 'step': 940},\n",
       "  {'loss': 0.867620587348938, 'acc': 0.65625, 'step': 941},\n",
       "  {'loss': 0.8484408259391785, 'acc': 0.6875, 'step': 942},\n",
       "  {'loss': 0.6604209542274475, 'acc': 0.71875, 'step': 943},\n",
       "  {'loss': 0.708708643913269, 'acc': 0.8125, 'step': 944},\n",
       "  {'loss': 0.8120269179344177, 'acc': 0.78125, 'step': 945},\n",
       "  {'loss': 0.6683734059333801, 'acc': 0.8125, 'step': 946},\n",
       "  {'loss': 0.7946433424949646, 'acc': 0.625, 'step': 947},\n",
       "  {'loss': 0.7178765535354614, 'acc': 0.78125, 'step': 948},\n",
       "  {'loss': 0.786166787147522, 'acc': 0.84375, 'step': 949},\n",
       "  {'loss': 0.7111520767211914, 'acc': 0.6875, 'step': 950},\n",
       "  {'loss': 0.9833261370658875, 'acc': 0.65625, 'step': 951},\n",
       "  {'loss': 0.6460896134376526, 'acc': 0.78125, 'step': 952},\n",
       "  {'loss': 0.9412922859191895, 'acc': 0.65625, 'step': 953},\n",
       "  {'loss': 0.8469646573066711, 'acc': 0.625, 'step': 954},\n",
       "  {'loss': 0.885767936706543, 'acc': 0.6875, 'step': 955},\n",
       "  {'loss': 0.7909647822380066, 'acc': 0.71875, 'step': 956},\n",
       "  {'loss': 0.9039297699928284, 'acc': 0.53125, 'step': 957},\n",
       "  {'loss': 0.8467467427253723, 'acc': 0.625, 'step': 958},\n",
       "  {'loss': 0.8363499045372009, 'acc': 0.65625, 'step': 959},\n",
       "  {'loss': 0.78912752866745, 'acc': 0.71875, 'step': 960},\n",
       "  {'loss': 0.722190797328949, 'acc': 0.6875, 'step': 961},\n",
       "  {'loss': 0.7272501587867737, 'acc': 0.78125, 'step': 962},\n",
       "  {'loss': 0.7198916077613831, 'acc': 0.71875, 'step': 963},\n",
       "  {'loss': 0.7383309006690979, 'acc': 0.71875, 'step': 964},\n",
       "  {'loss': 0.6904733180999756, 'acc': 0.6875, 'step': 965},\n",
       "  {'loss': 0.5528393387794495, 'acc': 0.8125, 'step': 966},\n",
       "  {'loss': 0.6920577883720398, 'acc': 0.8125, 'step': 967},\n",
       "  {'loss': 0.8238986134529114, 'acc': 0.5625, 'step': 968},\n",
       "  {'loss': 0.9664695858955383, 'acc': 0.65625, 'step': 969},\n",
       "  {'loss': 0.7560139894485474, 'acc': 0.65625, 'step': 970},\n",
       "  {'loss': 0.8305571675300598, 'acc': 0.6875, 'step': 971},\n",
       "  {'loss': 0.8300231695175171, 'acc': 0.5625, 'step': 972},\n",
       "  {'loss': 0.962158203125, 'acc': 0.6875, 'step': 973},\n",
       "  {'loss': 0.6440765261650085, 'acc': 0.84375, 'step': 974},\n",
       "  {'loss': 0.9124434590339661, 'acc': 0.5625, 'step': 975},\n",
       "  {'loss': 0.7832456827163696, 'acc': 0.71875, 'step': 976},\n",
       "  {'loss': 0.8125152587890625, 'acc': 0.65625, 'step': 977},\n",
       "  {'loss': 0.8934486508369446, 'acc': 0.6875, 'step': 978},\n",
       "  {'loss': 0.9467266798019409, 'acc': 0.5625, 'step': 979},\n",
       "  {'loss': 0.9727370142936707, 'acc': 0.625, 'step': 980},\n",
       "  {'loss': 0.6501694917678833, 'acc': 0.78125, 'step': 981},\n",
       "  {'loss': 0.6603484153747559, 'acc': 0.6875, 'step': 982},\n",
       "  {'loss': 0.7938117980957031, 'acc': 0.71875, 'step': 983},\n",
       "  {'loss': 0.8909949660301208, 'acc': 0.65625, 'step': 984},\n",
       "  {'loss': 0.7845458388328552, 'acc': 0.75, 'step': 985},\n",
       "  {'loss': 0.7625580430030823, 'acc': 0.75, 'step': 986},\n",
       "  {'loss': 0.713495671749115, 'acc': 0.65625, 'step': 987},\n",
       "  {'loss': 1.0460128784179688, 'acc': 0.6875, 'step': 988},\n",
       "  {'loss': 0.9975898861885071, 'acc': 0.65625, 'step': 989},\n",
       "  {'loss': 0.6046301126480103, 'acc': 0.875, 'step': 990},\n",
       "  {'loss': 0.8360005021095276, 'acc': 0.65625, 'step': 991},\n",
       "  {'loss': 0.872442901134491, 'acc': 0.6875, 'step': 992},\n",
       "  {'loss': 0.8657729625701904, 'acc': 0.6875, 'step': 993},\n",
       "  {'loss': 0.9740623831748962, 'acc': 0.625, 'step': 994},\n",
       "  {'loss': 0.9525586366653442, 'acc': 0.71875, 'step': 995},\n",
       "  {'loss': 0.6285573840141296, 'acc': 0.78125, 'step': 996},\n",
       "  {'loss': 0.8836266398429871, 'acc': 0.625, 'step': 997},\n",
       "  {'loss': 0.6314077973365784, 'acc': 0.8125, 'step': 998},\n",
       "  {'loss': 0.7825520038604736, 'acc': 0.78125, 'step': 999},\n",
       "  ...],\n",
       " 'val': [{'loss': np.float64(2.2967413987595435), 'acc': 0.155, 'step': 0},\n",
       "  {'loss': np.float64(0.8224726323121653), 'acc': 0.6862, 'step': 1000},\n",
       "  {'loss': np.float64(0.6635408445288198), 'acc': 0.767, 'step': 2000},\n",
       "  {'loss': np.float64(0.5791641980314407), 'acc': 0.7993, 'step': 3000},\n",
       "  {'loss': np.float64(0.5395246940775039), 'acc': 0.8083, 'step': 4000},\n",
       "  {'loss': np.float64(0.5406528101942409), 'acc': 0.8002, 'step': 5000},\n",
       "  {'loss': np.float64(0.498847901345061), 'acc': 0.8243, 'step': 6000},\n",
       "  {'loss': np.float64(0.4913057590159364), 'acc': 0.8276, 'step': 7000},\n",
       "  {'loss': np.float64(0.4648044741096588), 'acc': 0.835, 'step': 8000},\n",
       "  {'loss': np.float64(0.483841317244612), 'acc': 0.825, 'step': 9000},\n",
       "  {'loss': np.float64(0.4575522075445888), 'acc': 0.8362, 'step': 10000},\n",
       "  {'loss': np.float64(0.44301691061010756), 'acc': 0.8439, 'step': 11000},\n",
       "  {'loss': np.float64(0.448363638628786), 'acc': 0.8404, 'step': 12000},\n",
       "  {'loss': np.float64(0.4423131016306222), 'acc': 0.8432, 'step': 13000},\n",
       "  {'loss': np.float64(0.4306373634039404), 'acc': 0.8458, 'step': 14000},\n",
       "  {'loss': np.float64(0.4175784266747225), 'acc': 0.8529, 'step': 15000},\n",
       "  {'loss': np.float64(0.4183337406371348), 'acc': 0.853, 'step': 16000},\n",
       "  {'loss': np.float64(0.4160257119435472), 'acc': 0.8498, 'step': 17000},\n",
       "  {'loss': np.float64(0.41209281545382337), 'acc': 0.8521, 'step': 18000},\n",
       "  {'loss': np.float64(0.399371788953059), 'acc': 0.8577, 'step': 19000},\n",
       "  {'loss': np.float64(0.3984349050556128), 'acc': 0.8586, 'step': 20000},\n",
       "  {'loss': np.float64(0.39381744445988925), 'acc': 0.8599, 'step': 21000},\n",
       "  {'loss': np.float64(0.396466688773693), 'acc': 0.8587, 'step': 22000},\n",
       "  {'loss': np.float64(0.3839488197296572), 'acc': 0.8637, 'step': 23000},\n",
       "  {'loss': np.float64(0.38364985613777236), 'acc': 0.8637, 'step': 24000},\n",
       "  {'loss': np.float64(0.38577844566716174), 'acc': 0.863, 'step': 25000},\n",
       "  {'loss': np.float64(0.3805226588877626), 'acc': 0.8616, 'step': 26000},\n",
       "  {'loss': np.float64(0.3765218452380869), 'acc': 0.866, 'step': 27000},\n",
       "  {'loss': np.float64(0.3730265194187149), 'acc': 0.8661, 'step': 28000},\n",
       "  {'loss': np.float64(0.3704046419205757), 'acc': 0.8682, 'step': 29000},\n",
       "  {'loss': np.float64(0.3763296583328194), 'acc': 0.8636, 'step': 30000},\n",
       "  {'loss': np.float64(0.36274009121778295), 'acc': 0.8694, 'step': 31000},\n",
       "  {'loss': np.float64(0.38790586702644636), 'acc': 0.8611, 'step': 32000},\n",
       "  {'loss': np.float64(0.36252637588368436), 'acc': 0.8708, 'step': 33000},\n",
       "  {'loss': np.float64(0.37371789216519163), 'acc': 0.8684, 'step': 34000},\n",
       "  {'loss': np.float64(0.3775585944326922), 'acc': 0.8604, 'step': 35000},\n",
       "  {'loss': np.float64(0.37384031560664743), 'acc': 0.8667, 'step': 36000},\n",
       "  {'loss': np.float64(0.3518748810996834), 'acc': 0.8752, 'step': 37000},\n",
       "  {'loss': np.float64(0.3449275999928054), 'acc': 0.8771, 'step': 38000},\n",
       "  {'loss': np.float64(0.3533961821359377), 'acc': 0.872, 'step': 39000}]}"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 45
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:56:14.439287Z",
     "start_time": "2025-01-16T10:56:14.249589Z"
    }
   },
   "cell_type": "code",
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):\n",
    "    # build DataFrame\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "    print(train_df.head())\n",
    "    print(val_df.head())\n",
    "\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns) #因为有loss和acc两个指标，所以画个子图\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5)) #fig_num个子图，figsize是子图大小\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()\n",
    "        axs[idx].legend()\n",
    "        x_data=range(0, train_df.index[-1], 5000) #每隔5000步标出一个点\n",
    "        axs[idx].set_xticks(x_data)\n",
    "        axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", x_data)) #map生成labal\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=500)  #横坐标是 steps"
   ],
   "id": "c9a1859d10409eb9",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "          loss      acc\n",
      "step                   \n",
      "0     2.307147  0.15625\n",
      "500   1.159751  0.78125\n",
      "1000  0.574444  0.84375\n",
      "1500  0.639732  0.75000\n",
      "2000  0.691307  0.62500\n",
      "          loss     acc\n",
      "step                  \n",
      "0     2.296741  0.1550\n",
      "1000  0.822473  0.6862\n",
      "2000  0.663541  0.7670\n",
      "3000  0.579164  0.7993\n",
      "4000  0.539525  0.8083\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 46
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:56:20.654478Z",
     "start_time": "2025-01-16T10:56:20.648881Z"
    }
   },
   "cell_type": "code",
   "source": [
    "model = NeuralNetwork() #上线时加载模型\n",
    "model = model.to(device)"
   ],
   "id": "b45f8846df3ebfb8",
   "outputs": [],
   "execution_count": 47
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T10:56:22.477123Z",
     "start_time": "2025-01-16T10:56:21.504316Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# dataload for evaluating\n",
    "\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(\"checkpoints/best.ckpt\", map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, val_loader, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ],
   "id": "f02f46dc740da056",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\MECHREV\\AppData\\Local\\Temp\\ipykernel_3760\\1533974959.py:4: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
      "  model.load_state_dict(torch.load(\"checkpoints/best.ckpt\", map_location=\"cpu\"))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.3449\n",
      "accuracy: 0.8771\n"
     ]
    }
   ],
   "execution_count": 48
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
